从巨大的文本文件中收集数据

时间:2015-09-21 15:14:05

标签: python

我有一个由几个后续表组成的文本文件。我需要从某些表中获取某些值并将它们保存在输出文件中。每个表都有一个标题,其中包含一个可用于查找特定表的字符串。这些文本文件的大小可以从十分之一MB到一些GB。我写了以下脚本来完成这项工作:

string = 'str'
index = 20
n = 2

in_file = open('file.txt')
out_file = open("out.txt", 'w')
current_line = 0

for i in range(-index,index+1):
    for j in range(-index,index+1):
        for line in in_file:
            if string in line:
                En = line.split().pop(4)
                for line in in_file:
                    current_line += 1
                    if current_line == 2*(n+1)+2:
                        x = line.split().pop(10)
                    elif current_line == 3*(n+1)+2:
                        y = line.split().pop(10)
                    elif current_line == 4*(n+1)+2:
                        z = line.split().pop(10)
                        current_line = 0
                        break
                print i, j, En, x, y, z
                data = "%d %d %s %s %s %s\n" % (i,j,En,x,y,z)
                out_file.write(data)
                break
in_file.close()
out_file.close()

脚本逐行读取文件,搜索指定的字符串(本例中为“str”)。找到后,它会从包含该字符串的行中提取一个值,并继续读取构成数据表本身的行。由于文件中的所有表都具有相同的行数和列数,因此我使用变量current_line来跟踪读取的行,并指定哪行包含我需要的数据。前两个for循环就是生成一对索引,我需要在输出文件中打印(在这种情况下,它们介于-20和20之间)。

脚本运行正常。但是因为我自己一直在学习python大约一个月,而且我必须处理的文件非常大,我要求提供关于如何使脚本更高效,总体而言更好的建议。

另外,由于这些表是常规的,我可以事先知道哪些是包含我需要的值的行。所以我想知道,不是读取文件中的所有行,而是可以指定必须读取哪些行,然后直接在它们之间跳转?

Sample input file

这是一个示例输入文件。我已经包含了一些表格,因此您可以了解它是如何组织的。该文件由两个块组成,每个块有三个表。在此示例文件中,字符串“table#”用于查找要提取的数据。

Sample output file

这是一个示例输出文件。请记住,这两个文件不相同!此输出是由我的脚本使用包含1681个16个表的输入文件创建的。每个表都有13行,就像在示例输入文件中一样。

0 个答案:

没有答案