2014-02-16 2 views
1

텍스트 파일의 단어를 목록으로 분할하는 방법을 알아야합니다. 다음과 같이 사용할 수 있습니다.여러 줄의 텍스트 파일을 단일 목록으로 분할 하시겠습니까?

words = [] 
for line in open('text.txt'): 
    line.split() 
    words.append(line) 

그러나 파일에 여러 줄의 텍스트가 포함되어있는 경우 파일은 하위 목록으로 분할됩니다 (예 :

this is the first line 
this is the second line 

가된다 : 그들은 동일한 목록에 있도록

[['this', 'is', 'the', 'first', 'line'], ['this', 'is', 'the', 'second', 'line']] 

가 어떻게 그것을해야합니까? 즉

[['this', 'is', 'the', 'first', 'line', 'this', 'is', 'the', 'second', 'line']] 

감사합니다.

편집 : 이 프로그램은 여러 텍스트 파일을 열어 각 파일의 단어를 하위 목록에 추가해야합니다. 따라서 파일에 여러 줄이 있으면이 줄의 모든 단어를 하위 목록에 함께 저장해야합니다. 즉, 각각의 새 파일은 새 하위 목록을 시작합니다.

답변

1

당신이 [[]] 유지하려는 이유는 확실하지 있지만 :

words = [open('text.txt').read().split()] 
3

이 단어

[word for words in line.split() for word in words] 

의 목록을 평평하게처럼 당신은

result = [] 
for words in line.split(): 
    for word in words: 
     result.append(word) 

을 쓰기로이 동일 지능형리스트를 사용하거나이

from itertools import chain 
with open("Input.txt") as input_file: 
    print list(chain.from_iterable(line.split() for line in input_file)) 
처럼 itertools.chain.from_iterable을 사용할 수 있습니다
+0

내 프로그램으로이를 구현하는 방법을 아주 잘 모르겠습니다은 전에 (필요한 경우) 단어 정규식 치환을 수행 목록에 추가됩니다. 즉, 파일의 줄이 단어로 분리 된 다음 정규식 검사가 추가 된 다음 list에 새로 추가됩니다. –

2

코드가 실제로 말하는대로 작동하지 않습니다. line.split()은 줄에있는 단어 목록을 반환하는데, 아무 것도하지 않습니다. 어떤 식 으로든 line에 영향을 미치지 않으므로 words.append(line)을 수행하면 원래 줄인 단일 문자열이 추가됩니다.

그래서, 첫째, 당신은 그 문제를 해결해야한다 :

words = [] 
for line in open('text.txt'): 
    words.append(line.split()) 

이제, 당신이 반복적으로 빈리스트에 단어의 목록을 새로 추가되는 일을하고 있습니다. 물론 단어 목록을 얻을 수 있습니다. 이는 the append and extend methods of list이 (가) 혼합되어 있기 때문입니다. append은 임의의 객체를 취하여 해당 객체를 목록의 새 요소로 추가합니다. extend은 반복 가능한 모든 요소를 ​​가져와 해당 반복 가능한 요소의 각 요소를 목록의 별도의 새 요소로 추가합니다.

그리고 당신은 그것도 해결하는 경우 :

words = [] 
for line in open('text.txt'): 
    words.extend(line.split()) 

가 ... 지금 당신은 당신이 원하는 것을 얻을.

관련 문제