2013-07-26 2 views
2

텍스트 파일에서 목록 목록을 만들려고합니다. 내 텍스트 파일에는 각각 세 개의 문장이 들어있는 서로 다른 범주가 들어 있습니다. 그것은 다음과 같은 종류의 외모 :텍스트 파일에서 목록 목록 만들기

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[i:i+3]이 범주이며, data는 각 문장이 포함되어 있다는 것입니다, 나는 범주의 목록을 만들기 위해 지능형리스트를 사용

+2

텍스트 파일의 크기는 어느 정도입니까? –

+2

try :'open ('abc.txt'). read(). split ('\ n \ n')'. –

+0

5 개 카테고리가 있으므로 작습니다! – user2618146

답변

0

당신은 지능형리스트를 사용할 수 있습니다.

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']] 
0

그것은 파이썬에게 한 줄 :)

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_1의 모든 블록에 expression_2을 사용하고 목록을 만듭니다. 간단하고 한 줄에 :)