从文本文件创建列表列表

时间:2013-07-26 17:57:53

标签: python file list

我正在尝试从文本文件创建列表列表。我的文本文件包含不同的类别,每个类别包含三个句子它看起来像这样:

Sentence 1 
Sentence 2 
Sentence 3

Sentence 1 
Sentence 2 
Sentence 3

Sentence 1... etc.

我想阅读这些内容并将每个类别保存到列表中,然后列出这些列表/类别。不幸的是,到目前为止,我的所有尝试都失败了,因为它们一次不能处理多行。类别之间的空白行用作分区。

3 个答案:

答案 0 :(得分:0)

您可以使用列表理解:

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]是一个类别,我使用列表推导来制作类别列表。

答案 1 :(得分:0)

您可以使用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']]

答案 2 :(得分:0)

这将是python one-liner:)

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用于消除空行,如果你使用了两个以上的行或者有空的lasy行。

最后一件事是连接它 - result = list( expression_2 for e in expression_1) - 我们只在expression_2的每个块上使用expression_1并从中创建列表。只需一行:)