【发布时间】:2016-11-11 09:28:05
【问题描述】:
我在How to interate over N lines of a text file in Python 上发布了一个问题,但我想让程序更适用于 N 行(例如,我不想一次收集两行,而是一次收集四到六行。
我要转这个 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
对此:
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 ...
以下是我目前所拥有的
vibration = 1
with open('disp1.txt','r') as f, open('disp2.txt', 'w') as out:
while True:
next_lines = list(islice(f,2))
m = next_lines
for i in m:
s = i.strip().split('\n')
for j in s:
p = j.split()
v = len(p)
for u in range(2,5,3):
out.write('vibration {}\n'.format(vibration))
out.write(' '.join(p[u:u+3])+'\n')
vibration += 1
for x in range(5,8,3):
out.write(' '.join(p[x:x+3])+'\n')
for y in range(8,11,3):
out.write(' '.join(p[y:y+3])+'\n')
if not next_lines:
break
显示这个:
vibration 1
0.12 -0.91 0.39
-0.40 0.31 0.85
-0.66 -0.18 -0.22
vibration 2
0.00 -0.02 0.00
-0.05 0.05 0.12
-0.57 -0.26 -0.29
vibration 3
-0.03 -0.04 0.00
0.01 0.09 0.19
-0.71 -0.21 -0.26
vibration 4
-0.14 0.88 -0.45
0.47 -0.33 -0.79
0.57 0.16 0.19
所以它是在整个页面上阅读,而不是阅读前三列数字的前两行,然后继续阅读下一组三,依此类推。 通过使用 isplice 它一次读取两行,但由于我不明白的原因,这两行都没有通过第一个循环(对于 u in range(2,5,3):),然后再进入下一个循环(对于x 在范围(5,8,3):) 相反,每一行都通过每个循环。 谁能帮我解决这个问题?
谢谢。
【问题讨论】:
-
但是 0.12 -0.91 0.39 -0.40 0.31 0.85 -0.66 -0.18 -0.22 是一行!
-
我的回答有用吗?如果是,请将其标记为正确(绿色复选)。
-
嗨 Dani,因为我有六次振动,但你给我看的却是三个,那我就得再重复你写的三遍,对吧?如果是这种情况,我会尽量避免为我所拥有的每个不同数量的振动手动执行此操作。
-
您的目标是拥有一份打印声明吗?
标签: python-2.7 python-3.x for-loop