2017-02-12 39 views
0

我有这种格式线大文本文件:提取分隔符之间的文本文件的行成一个列表的Python

DELIM 
filename1 
information 
information 
DELIM 
filename2 
information 
information 
information 
information 
DELIM 

等,其中数据的分隔符之间的量而变化。 我该如何着手将分隔符之间的所有内容写成列表?

+1

你能举一个(小)例子吗?文件名和“信息”有什么结构上的不同? –

+0

文件名都是“* .h”或“* .cpp”,信息全部是函数名称 – Johnny

回答

2

只要DELIM不能被发现在中间线,你能做到这一点很容易通过:

  • 充分阅读您的文件,如果你的文件有20TB的数据(不工作那么好它,但确定为合理大小的文件)
  • 在列表理解上DELIM
  • 分裂split每个块和过滤坯件(工件)施加str.split

我的建议:

with open("file.txt") as f: 
    lines = [x.split() for x in f.read().split("DELIM") if x] 

print(lines) 

结果与你的输入(如线的名单列表):

[['filename1', 'information', 'information'], ['filename2', 'information', 'information', 'information', 'information']] 

编辑:有一个大的文件,你可以使用itertools.groupy如下(避免阅读该文件在一次)

with open("file.txt") as f: 
    lines = [list(v) for k,v in itertools.groupby(f,key=lambda x : x.strip()=="DELIM") if not k] 

groupby基的非DELIM线一起和DELIM线一起为好,与True/False键:我们筛选出True键与DELIM组对应,并转换为list,达到与前面的代码相同的值,只是我们不需要事先读取文件,所以它可以与一个巨大的文件以及。

+0

这个工程很棒!谢谢! – Johnny

+0

使用'itertools.groupby'怎么样? –

+0

这不会在第一个或最后一个DELIM之前正确过滤出行。 'foo \ nDELIM \ nDELIM \ nbar'应该返回'[]'(或者可以说'[[]]')。 – Kevin

相关问题