2016-12-08 5 views
0

9行のヘッダーとNx5デー​​タ配列(Nが大きい、10000番の注文)によって作成されたLAMMPSシミュレーションのファイルがたくさんあります。ファイルには、次のようになります。データファイルの変更:savetxtヘッダーオプションの問題

ITEM: TIMESTEP 
1700000 
ITEM: NUMBER OF ATOMS 
40900 
ITEM: BOX BOUNDS pp pp pp 
0 59.39 
0 59.39 
0 59.39 
ITEM: ATOMS id type xu yu zu 
1 1 -68.737755560980844 1.190046376093027 122.754819323806714 
2 1 -68.334493269859621 0.365731265115530 122.943111038981527 
3 1 -68.413018326512173 -0.456802254452782 123.436843456292138 
4 1 -68.821350328206080 -1.360098170077123 123.314784135612115 
5 1 -67.876948635447775 -1.533699833382506 123.072964235308660 
6 1 -67.062910322675322 -2.006415676993953 123.431518511867381 
7 1 -67.069984116148134 -2.899068427170739 123.057125785834685 
8 1 -66.207325578729183 -3.292545155979909 123.377770523297343 
... 

私は、すべてのファイルを開くに数値データに特定の操作を実行し、そのままヘッダを残して別の名前でファイルを保存したいと思います。私のスクリプトは次のとおりです。

for f in files: 
filename=path+"/"+f 
with open(filename) as myfile: 
     header = ' '.join([next(myfile) for x in xrange(9)]) 
data=np.loadtxt(filename,skiprows=9) 
data[:,2:5]%=L #Put everything inside the box... 
savetxt(filename.replace("lammpstrj","fold.lammpstrj"),data,header=header,comments="",fmt="%d %d %.15f %.15f %.15f") 

出力は、しかし、次のようになります。

ITEM: TIMESTEP 
1700000 
ITEM: NUMBER OF ATOMS 
40900 
ITEM: BOX BOUNDS pp pp pp 
0 59.39 
0 59.39 
0 59.39 
ITEM: ATOMS id type xu yu zu 

1 1 50.042244439019157 1.190046376093027 3.974819323806713 
2 1 50.445506730140380 0.365731265115530 4.163111038981526 
3 1 50.366981673487828 58.933197745547218 4.656843456292137 
4 1 49.958649671793921 58.029901829922878 4.534784135612114 
5 1 50.903051364552226 57.856300166617494 4.292964235308659 
6 1 51.717089677324680 57.383584323006048 4.651518511867380 
7 1 51.710015883851867 56.490931572829261 4.277125785834684 
8 1 52.572674421270818 56.097454844020092 4.597770523297342 
... 

ヘッダがまったく同じではありません。最初のを除いて、すべての行の先頭にスペースがあると、ヘッダの最後の行の後の改行。私はそれらを取り除く必要があるが、私はどのようにわからない。

私は間違っていますか?

+1

'' '.join() 'で、空の' '''ではなく、なぜそれらを空白文字で結合していますか? – Benjamin

答えて

1

問題が' '.join(a)である:代わりに

a = ['sadf\n', 'sdfg\n'] 
' '.join(a) 
>>>'sadf\n sdfg\n' # Note the space at the start of the second line. 

''.join(a) 
>>>'sadf\nsdfg\n' 

ます。また、空行を防止するために、最後の '\ n' はあなたのヘッダー内をトリミングする必要があります。

''.join(a).rstrip() 
>>>'sadf\nsdfg' 
+0

いいです、このrstrip()関数は本当に便利です。私が初めて使うのです。 – valerio

0

ヘッダパラメータは自動的に改行が追加されるため、オリジナルを削除することができます最後に '\ n'を冗長改行として使用します。

各行を余分なスペース文字で結合するため、先頭のスペースが表示されます。以下のコマンドで解決することができます。

header = ''.join([next(myfile) for x in xrange(9)]) 
関連する問題