使用Python处理(非常长)数据文件

时间:2019-11-12 16:28:18

标签: python

我正在尝试编写处理非常长的文档(超过一百万行)的代码。 在此文本文件中,每隔一定间隔(每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()

我在哪里弄乱了,我该如何纠正? 感谢您的提前帮助!

2 个答案:

答案 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)