我正在尝试编写处理非常长的文档(超过一百万行)的代码。 在此文本文件中,每隔一定间隔(每1003行)有一些时间戳记 有我需要的数据,它是1000行长,一个标题和两个空行,我不需要。
我希望我的代码从用户那里输入一个介于1到1000之间的引用时间戳的输入,并将相应的代码行复制到单独的txt中。
如果输入为“ 0”,我编写的代码将按预期工作,但如果输入其他任何数字,则不会提供任何输出。
这是我的代码:
import sys
time = input()
output = open('rho_output_t' + str(time), 'w',)
sys.stdout = output
filepath = 'rho.xg'
l = 2 #lower limit of 0th interval
u = 1001 #upper limit of 0th interval
step = 1003
with open(filepath) as fp:
for t in range(0, 1000):
print("{} ".format(t)) #this is only here so I can see the for loop running correctly
for cnt, line in enumerate(fp):
if int(time) == t and cnt >= l+(step*int(time)) and cnt <= u+(step*int(time)):
print("Line {}: {}".format(cnt, line))
output.close()
我在哪里弄乱了,我该如何纠正? 感谢您的提前帮助!
答案 0 :(得分:1)
尝试:
with open(filepath) as fp:
for t in range(0, 1000):
print("{} ".format(t)) #this is only here so I can see the for loop running correctly
if int(time) == t:
for cnt, line in enumerate(fp):
cnt >= l+(step*int(time)) and cnt <= u+(step*int(time)):
print("Line {}: {}".format(cnt, line))
这将确保您仅在正确的输入时间查看fp的内容,从而防止其在t==0
处被清空。
答案 1 :(得分:0)
那
filepath = 'rho.xg'
l = 2 #lower limit of 0th interval
u = 1001 #upper limit of 0th interval
step = 1003
time = int(input())
start = l + time * step
with open(filepath) as fin, open('rho_output_t' + str(time), 'w') as fout:
for _ in range(start):
next(fin)
for i in range(u-1):
line = next(fin)
print(f'Line {start+i}: {line}')
fout.write(line)