读取数据文件空白空间之间的行并写入新文件



我有BIG数据文本文件,例如:

#01textline1
1 2 3 4 5 6
2 3 5 6 7 3
3 5 6 7 6 4
4 6 7 8 9 9
1 2 3 6 4 7
3 5 7 7 8 4
4 6 6 7 8 5
3 4 5 6 7 8
4 6 7 8 8 9
..
..

我想提取空行之间的数据,并将其写入新文件。很难知道文件中有多少空行(意味着你也不知道你将要写多少新文件;因此,写新文件似乎很难,因为你不知道你要写多少个新文件。有人能指导我吗?谢谢。我希望我的问题很清楚。

除非您的文件很大,否则请使用re将所有文件拆分为单独的部分,在2个或多个空白字符上进行拆分

import re
with open("in.txt") as f:
    lines = re.split("s{2,}",f.read())
    print lines
['#01textline1n1 2 3 4 5 6n2 3 5 6 7 3n3 5 6 7 6 4n4 6 7 8 9 9', '1 2 3 6 4 7n3 5 7 7 8 4n4 6 6 7 8 5', '3 4 5 6 7 8n4 6 7 8 8 9']

只需逐行迭代并在每次迭代时编写新文件即可。

读取文件不是数据挖掘。请选择更合适的标签。。。

在空行上拆分文件是微不足道的:

num = 0
out = open("file-0", "w")
for line in open("file"):
    if line == "n":
      num = num + 1
      out.close()
      out = open("file-"+num, "w")
      continue
    out.write(line)
out.close()

由于这种方法一次只读取一行,因此文件大小无关紧要。它应该以磁盘所能处理的速度处理数据,并且内存使用率几乎恒定。

Perl会有一个巧妙的技巧,因为您可以通过$/="nn";将输入记录分隔符设置为两个换行符,然后像往常一样一次处理一个记录的数据。。。我在蟒蛇身上找不到类似的东西;但"空行拆分"的破解也不错。

这是一个开始:

with open('in_file') as input_file:
    processing = False
    i = 0
    for line in input_file:
        if line.strip() and not processing:
            out_file = open('output - {}'.format(i), 'w')
            out_file.write(line)
            processing = True
            i += 1
        elif line.strip():
            out_file.write(line)
        else:
            processing = False
            out_file.close()

此代码使用processing标志跟踪当前是否正在写入文件。当看到空行时,它会重置标志。代码还会在看到空行时创建一个新文件。

希望能有所帮助。

相关内容

  • 没有找到相关文章

最新更新