0
入力ファイルの形式を出力ファイルに保存する必要がありますが、第2列のアトムを列挙した後でコードが正しく処理しません。入力ファイルのように出力ファイル形式を取得するにはどうすればよいですか?入力ファイルの出力ファイル形式を取得する方法
マイコード:
from collections import defaultdict
with open('output.gro', mode='w') as f1:
with open('input.gro', mode='r') as f2:
f2lines=f2.readlines()
f2line=int(f2lines[1])
f1.write ("Good gRace! Old Maple Actually Chews Slate\n")
f1.write (" %d\n" % f2line)
# print (" %d" % f2line)
counts = defaultdict(int)
for lines in f2lines:
if '1LIG' in lines:
column = lines.split()
counts[column[1]] += 1
# print column[1]+str(counts[column[1]])
f1.write (" %s %s %s %.3f %.3f %.3f\n" % (column[0], column[1]+str(counts[column[1]]), column[2], float(column[3]), float(column[4]), float(column[5])))
f1.write (" 0.00000 0.00000 0.00000\n")
入力ファイル:
Good gRace! Old Maple Actually Chews Slate
24
1LIG BR 1 1.430 -2.642 -1.020
1LIG CL 2 1.031 -2.291 -0.877
1LIG CL 3 1.626 -2.468 -0.811
1LIG S 4 1.132 -2.341 -0.478
1LIG P 5 1.175 -2.166 -0.553
1LIG O 6 1.239 -2.163 -0.702
1LIG O 7 1.280 -2.073 -0.470
1LIG O 8 1.051 -2.062 -0.570
1LIG C 9 1.282 -2.272 -0.774
1LIG C 10 1.195 -2.340 -0.859
1LIG C 11 1.414 -2.312 -0.760
1LIG C 12 1.460 -2.422 -0.832
1LIG C 13 1.242 -2.450 -0.931
1LIG C 14 1.374 -2.491 -0.918
1LIG C 15 1.400 -2.130 -0.420
1LIG C 16 0.917 -2.110 -0.557
1LIG H 17 1.481 -2.258 -0.693
1LIG H 18 1.174 -2.504 -0.998
1LIG H 19 1.481 -2.111 -0.491
1LIG H 20 1.387 -2.238 -0.408
1LIG H 21 1.425 -2.086 -0.324
1LIG H 22 0.916 -2.218 -0.569
1LIG H 23 0.855 -2.064 -0.634
1LIG H 24 0.879 -2.084 -0.458
0.00000 0.00000 0.0000
得られる出力:
Good gRace! Old Maple Actually Chews Slate
24
1LIG BR1 1 1.430 -2.642 -1.020
1LIG CL1 2 1.031 -2.291 -0.877
1LIG CL2 3 1.626 -2.468 -0.811
1LIG S1 4 1.132 -2.341 -0.478
1LIG P1 5 1.175 -2.166 -0.553
1LIG O1 6 1.239 -2.163 -0.702
1LIG O2 7 1.280 -2.073 -0.470
1LIG O3 8 1.051 -2.062 -0.570
1LIG C1 9 1.282 -2.272 -0.774
1LIG C2 10 1.195 -2.340 -0.859
1LIG C3 11 1.414 -2.312 -0.760
1LIG C4 12 1.460 -2.422 -0.832
1LIG C5 13 1.242 -2.450 -0.931
1LIG C6 14 1.374 -2.491 -0.918
1LIG C7 15 1.400 -2.130 -0.420
1LIG C8 16 0.917 -2.110 -0.557
1LIG H1 17 1.481 -2.258 -0.693
1LIG H2 18 1.174 -2.504 -0.998
1LIG H3 19 1.481 -2.111 -0.491
1LIG H4 20 1.387 -2.238 -0.408
1LIG H5 21 1.425 -2.086 -0.324
1LIG H6 22 0.916 -2.218 -0.569
1LIG H7 23 0.855 -2.064 -0.634
1LIG H8 24 0.879 -2.084 -0.458
0.00000 0.00000 0.00000
所望の出力ファイル:
Good gRace! Old Maple Actually Chews Slate
24
1LIG BR1 1 1.430 -2.642 -1.020
1LIG CL1 2 1.031 -2.291 -0.877
1LIG CL2 3 1.626 -2.468 -0.811
1LIG S1 4 1.132 -2.341 -0.478
1LIG P1 5 1.175 -2.166 -0.553
1LIG O1 6 1.239 -2.163 -0.702
1LIG O2 7 1.280 -2.073 -0.470
1LIG O3 8 1.051 -2.062 -0.570
1LIG C1 9 1.282 -2.272 -0.774
1LIG C2 10 1.195 -2.340 -0.859
1LIG C3 11 1.414 -2.312 -0.760
1LIG C4 12 1.460 -2.422 -0.832
1LIG C5 13 1.242 -2.450 -0.931
1LIG C6 14 1.374 -2.491 -0.918
1LIG C7 15 1.400 -2.130 -0.420
1LIG C8 16 0.917 -2.110 -0.557
1LIG H1 17 1.481 -2.258 -0.693
1LIG H2 18 1.174 -2.504 -0.998
1LIG H3 19 1.481 -2.111 -0.491
1LIG H4 20 1.387 -2.238 -0.408
1LIG H5 21 1.425 -2.086 -0.324
1LIG H6 22 0.916 -2.218 -0.569
1LIG H7 23 0.855 -2.064 -0.634
1LIG H8 24 0.879 -2.084 -0.458
0.00000 0.00000 0.0000
幅に基づいて文字列をフォーマットするだけです。これを確認してくださいhttp://stackoverflow.com/questions/8450472/how-to-format-print-output-into-fixed-width –
一般的な解決策をお探しですか?例えば。元の行に特定の列に 'x'のパディングがあり、左揃えの場合、出力にはそのようにする必要がありますか?あるいは、あなたは何か不変であると予想していますか?後であれば、上記のSivaのリンクを参照してください。 – SCB