我正在尝试从文本文件创建列表列表。我的文本文件包含不同的类别,每个类别包含三个句子。它看起来像这样:
Sentence 1
Sentence 2
Sentence 3
Sentence 1
Sentence 2
Sentence 3
Sentence 1... etc.
我想阅读这些并将每个类别保存到一个列表中,然后列出这些列表/类别。不幸的是,到目前为止,我所有的尝试都失败了,因为它们一次不能处理超过一条线。类别之间的空白行旨在作为一个分区。
您可以使用列表推导:
with open('file', 'r') as f:
data = f.readlines()
result = [ data[i:i+3] for i in range(0,len(data),4)]
发生的事情是data
包含每个句子,data[i:i+3]
是一个类别,我使用列表推导来制作类别列表。
您可以使用itertools.groupby
:
>>> from itertools import groupby
with open('filename') as f:
lis = [map(str.strip, g) for k,g in
groupby(f, key = lambda x : not x.strip()) if not k]
...
>>> lis
[['Sentence 1', 'Sentence 2', 'Sentence 3'],
['Sentence 1', 'Sentence 2', 'Sentence 3'],
['Sentence 1']]
如果文件很小,那么这也很好:
with open('abc1') as f:
print [map(str.strip, x.rsplit('\n')) for x in f.read().rsplit('\n\n')]
...
[['Sentence 1', 'Sentence 2', 'Sentence 3'],
['Sentence 1', 'Sentence 2', 'Sentence 3'],
['Sentence 1']]
它将是python单线:)
result = list(list(l for l in e.split("\n") if l) for e in open("file").read().split("\n\n"))
这个怎么运作?
open("file").read().split("\n\n")
打开文件,读取它并按双输入分割块。
list(l for l in e.split("\n") if l)
将一个块(命名为e
)拆分为行并从中创建列表。if l
用于消除空行,如果您使用了两个以上的输入或有空的激光行。
最后一件事是连接它 -result = list( expression_2 for e in expression_1)
我们只是expression_2
在每个块上使用expression_1
并从中列出。简单的一行:)