需要阅读Python中特定范围的文本文件
我需要在特定行之后读取文本文件,让行号为#100。此行具有特定的编号,例如'255'。 然后我想读取下500行使用for循环。 在这500行中,我有一些数字要提取。 如在P [3]的位置。 然后我需要将这些值传递给一个数组。 最后,我应该有几组像下面。 我用下面的代码来做到这一点。 但我失败了。 谁能帮我。
文件如下所示
Generated by trjconv : a bunch of waters t= 0.00000
500
1SOL OW 1 1.5040 2.7580 0.6820
2SOL OW 4 1.5210 0.9510 2.2050
500SOL OW 2998 1.5310 1.7952 2.1981
3.12736 3.12736 3.12736
Generated by trjconv : a bunch of waters t= 9000.00000
500
1SOL OW 1 1.5040 2.7580 0.6820
2SOL OW 4 1.5210 0.9510 2.2050
500SOL OW 2998 1.5310 1.7952 2.1981
3.10941 3.10941 3.10941
Generated by trjconv : a bunch of waters t= 0.00000
500
1SOL OW 1 1.5040 2.7580 0.6820
2SOL OW 4 1.5210 0.9510 2.2050
500SOL OW 2998 1.5310 1.7952 2.1981
3.12736 3.12736 3.12736
Generated by trjconv : a bunch of waters t= 9000.00000
500
1SOL OW 1 1.5040 2.7580 0.6820
2SOL OW 4 1.5210 0.9510 2.2050
500SOL OW 2998 1.5310 1.7952 2.1981
3.10941 3.10941 3.10941
编码我写了
F = open('Data.gro', 'r')
A = open('XYZ.txt', 'w')
XO = []
I = range(1,500)
for line in F:
P = line.split()
if P[0] == '256': # after i found this I want to read next five hundred lines.
for R in I:
P = line.split()
XO.append(P[3])
R +=1
# after the for loop I want write 'XO' in to file as set 01 then should go to next P[0] == '256'
结果应该如下文件名'XYZ.txt'
Set 01
X = [1.32, 4.132, 2.23, .... upto 500]
Set 02
X = [4.232, 1.162, 3.73, .... upto 500]
你只需要获取内循环中的行,你可以使用next()
来实现:
with open('filename') as f:
for line in f:
if line.split()[0] == '256':
for _ in xrange(500):
line = next(f)
#do something with line
在上面的代码中,如果文件在条件为True后没有500行,则会出现StopIteration
错误,您可以使用try-except
或使用itertools.islice
对文件对象进行切片处理:
from itertools import islice
with open('filename') as f:
for line in f:
if line.split()[0] == '256':
XO =[line.split(None, 4)[3] for line in islice(f, 500)]
#Write XO to a file
如果行不是以前导空格开头,则可以使用@zhangxaochen建议将line.split()[0] == '256'
部分替换为line.startswith('256 ')
。 另一种选择是使用line.split(None, 1)[0] == '256'
,这将仅分割一行。
上一篇: Need to read specific range of text file in Python
下一篇: How do I release versions on github through the command line?