2

テキストファイルからリストのリストを作成しようとしています。私のテキスト ファイルには、それぞれ 3 つの文を含むさまざまなカテゴリが含まれています。次のようになります。

Sentence 1 
Sentence 2 
Sentence 3

Sentence 1 
Sentence 2 
Sentence 3

Sentence 1... etc.

これらを読んで各カテゴリをリストに保存し、それらのリスト/カテゴリのリストを作成したいと思います。残念ながら、一度に複数の行を処理できないため、これまでのところすべての試みが失敗しています。カテゴリ間の空白行は、パーティションとして意図されています。

4

3 に答える 3

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]、カテゴリであり、リスト内包表記を使用してカテゴリのリストを作成します。

于 2013-07-26T18:01:57.267 に答える
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']]
于 2013-07-26T18:06:05.640 に答える
0

それは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)1 つのブロック ( という名前e) を行に分割し、そこからリストを作成します。if l2 つ以上の入力を使用した場合、または空行を取得した場合に、空行を削除するために使用されます。

最後に、それを接続します - -すべてのブロックをresult = list( expression_2 for e in expression_1)使用し、それらからリストを作成します。シンプルに一行で:)expression_2expression_1

于 2013-07-26T18:13:40.180 に答える