如何在 Python 中遍历文本文件的 N 行
How to interate over N lines of a text file in Python
您好,我正在尝试转换文件 disp.txt 来自:
116 C 0.12 -0.91 0.39 -0.40 0.31 0.85 -0.66 -0.18 -0.22
117 O 0.00 -0.02 0.00 -0.05 0.05 0.12 -0.57 -0.26 -0.29
116 C -0.03 -0.04 0.00 0.01 0.09 0.19 -0.71 -0.21 -0.26
117 O -0.14 0.88 -0.45 0.47 -0.33 -0.79 0.57 0.16 0.19
到disp.mol:
vibration 1
0.12 -0.91 0.39
0.0 -0.02 0.0
vibration 2
-0.4 0.31 0.85
-0.05 0.05 0.12
vibration 3
-0.66 -0.18 -0.22
-0.57 -0.26 -0.29
vibration 4
-0.03 -0.04 0.00
-0.14 0.88 -0.45
vibration 5 ...
I opened the disp.txt file using with open('disp.txt', 'w') as f:
Read in the lines using lines = f.readlines()
split the data using for x in lines: numbers = x.split()
then
vib1.append(float(numbers[2])), vib2.append and stored them in
vib1=[], vib2=[], etc.
当我需要以 disp.mol 中的格式存储我存储的数据时,我的问题就出现了。使用下面的代码,我能够从前两行获得前三个振动的输出,但我不确定如何在接下来的两行中执行相同的循环(以及如果我有更多 2N 行) .我也不确定如何对每次振动进行编号。对此有任何帮助,我们将不胜感激。
with open('disp.mol', 'w') as thisfile:
thisfile.writelines('vibration')
thisfile.writelines('\n')
for x in range (0, 2):
vib_one = str(vib1[x]) + ' ' + str(vib2[x]) + ' ' + str(vib3[x])
thisfile.writelines(vib_one)
thisfile.writelines('\n')
thisfile.writelines('vibration')
thisfile.writelines('\n')
for x in range (0, 2):
vib_two = str(vib4[x]) + ' ' + str(vib5[x]) + ' ' + str(vib6[x])
thisfile.writelines(vib_two)
thisfile.writelines('\n')
thisfile.writelines('vibration')
thisfile.writelines('\n')
for x in range (0, 2):
vib_three = str(vib7[x]) + ' ' + str(vib8[x]) + ' ' + str(vib9[x])
thisfile.writelines(vib_three)
thisfile.writelines('\n')
输出:
vibration
0.12 -0.91 0.39
0.0 -0.02 0.0
vibration
-0.4 0.31 0.85
-0.05 0.05 0.12
vibration
-0.66 -0.18 -0.22
-0.57 -0.26 -0.29
方法如下:
with open('disp.txt') as f, open('disp.mol','w') as out:
vibration = 1
for line in f:
line1 = line.split()
line2 = next(f).split() # also get next line
for i in range(2,len(line1),3):
out.write('vibration {}\n'.format(vibration))
out.write(' '.join(line1[i:i+3])+'\n')
out.write(' '.join(line2[i:i+3])+'\n')
vibration += 1
输出:
vibration 1
0.12 -0.91 0.39
0.00 -0.02 0.00
vibration 2
-0.40 0.31 0.85
-0.05 0.05 0.12
vibration 3
-0.66 -0.18 -0.22
-0.57 -0.26 -0.29
vibration 4
-0.03 -0.04 0.00
-0.14 0.88 -0.45
vibration 5
0.01 0.09 0.19
0.47 -0.33 -0.79
vibration 6
-0.71 -0.21 -0.26
0.57 0.16 0.19
您好,我正在尝试转换文件 disp.txt 来自:
116 C 0.12 -0.91 0.39 -0.40 0.31 0.85 -0.66 -0.18 -0.22
117 O 0.00 -0.02 0.00 -0.05 0.05 0.12 -0.57 -0.26 -0.29
116 C -0.03 -0.04 0.00 0.01 0.09 0.19 -0.71 -0.21 -0.26
117 O -0.14 0.88 -0.45 0.47 -0.33 -0.79 0.57 0.16 0.19
到disp.mol:
vibration 1
0.12 -0.91 0.39
0.0 -0.02 0.0
vibration 2
-0.4 0.31 0.85
-0.05 0.05 0.12
vibration 3
-0.66 -0.18 -0.22
-0.57 -0.26 -0.29
vibration 4
-0.03 -0.04 0.00
-0.14 0.88 -0.45
vibration 5 ...
I opened the disp.txt file using with open('disp.txt', 'w') as f:
Read in the lines using lines = f.readlines()
split the data using for x in lines: numbers = x.split()
then vib1.append(float(numbers[2])), vib2.append and stored them in vib1=[], vib2=[], etc.
当我需要以 disp.mol 中的格式存储我存储的数据时,我的问题就出现了。使用下面的代码,我能够从前两行获得前三个振动的输出,但我不确定如何在接下来的两行中执行相同的循环(以及如果我有更多 2N 行) .我也不确定如何对每次振动进行编号。对此有任何帮助,我们将不胜感激。
with open('disp.mol', 'w') as thisfile:
thisfile.writelines('vibration')
thisfile.writelines('\n')
for x in range (0, 2):
vib_one = str(vib1[x]) + ' ' + str(vib2[x]) + ' ' + str(vib3[x])
thisfile.writelines(vib_one)
thisfile.writelines('\n')
thisfile.writelines('vibration')
thisfile.writelines('\n')
for x in range (0, 2):
vib_two = str(vib4[x]) + ' ' + str(vib5[x]) + ' ' + str(vib6[x])
thisfile.writelines(vib_two)
thisfile.writelines('\n')
thisfile.writelines('vibration')
thisfile.writelines('\n')
for x in range (0, 2):
vib_three = str(vib7[x]) + ' ' + str(vib8[x]) + ' ' + str(vib9[x])
thisfile.writelines(vib_three)
thisfile.writelines('\n')
输出:
vibration
0.12 -0.91 0.39
0.0 -0.02 0.0
vibration
-0.4 0.31 0.85
-0.05 0.05 0.12
vibration
-0.66 -0.18 -0.22
-0.57 -0.26 -0.29
方法如下:
with open('disp.txt') as f, open('disp.mol','w') as out:
vibration = 1
for line in f:
line1 = line.split()
line2 = next(f).split() # also get next line
for i in range(2,len(line1),3):
out.write('vibration {}\n'.format(vibration))
out.write(' '.join(line1[i:i+3])+'\n')
out.write(' '.join(line2[i:i+3])+'\n')
vibration += 1
输出:
vibration 1
0.12 -0.91 0.39
0.00 -0.02 0.00
vibration 2
-0.40 0.31 0.85
-0.05 0.05 0.12
vibration 3
-0.66 -0.18 -0.22
-0.57 -0.26 -0.29
vibration 4
-0.03 -0.04 0.00
-0.14 0.88 -0.45
vibration 5
0.01 0.09 0.19
0.47 -0.33 -0.79
vibration 6
-0.71 -0.21 -0.26
0.57 0.16 0.19