2010-03-09 1 views
3

에 파일의 내용은 내가파이썬 - 중첩 된 목록

123 abc 
456 def 
789 ghi 

내가 중첩 된 목록에 파일의 내용을 변환하는 함수를 작성하고자하는, 예를 들어, 후행 개행 문자를 탭으로 구분 된 형식의 파일이 있습니다. 지금까지 나는 시도했다 :

def ls_platform_ann(): 
    keyword = [] 
    for line in open("file", "r").readlines(): 
     for value in line.split(): 
      keyword.append(value) 

def nested_list_input(): 
    nested_list = [] 
    for line in open("file", "r").readlines(): 
     for entry in line.strip().split(): 
      nested_list.append(entry) 
      print nested_list 

합니다.

전자는 중첩 목록을 만들지 만 \ n 및 \ t 문자를 포함합니다. 후자는 중첩 목록을 만들지 않고 \ n 및 \ t 문자없이 많은 동등한 목록을 만듭니다.

누구에게 도움이됩니까?

감사합니다, S ;-)

+2

텍스트 파일을 반복 할 때'.readlines()'는 필요 없습니다. 또한'ls_platform_ann' **은 중첩 목록을 만들지 않습니다 **. 또는 관련 코드를 모두 표시하지 않습니다. – SilentGhost

답변

3

또 다른 옵션 csv 모듈을 포함하지 않는 것입니다 : A와

data = [[item.strip() for item in line.rstrip('\r\n').split('\t')] for line in open('input.txt')] 

여러 줄의 명령문은 다음과 같이 보일 것입니다 :

data = [] 
for line in open('input.txt'): 
    items = line.rstrip('\r\n').split('\t') # strip new-line characters and split on column delimiter 
    items = [item.strip() for item in items] # strip extra whitespace off data items 
    data.append(items) 
3

첫째는 csv 모듈 봐, 그것은 당신을 위해 공백을 처리해야합니다. 값/항목에 strip()으로 전화 할 수도 있습니다.

8

csv 모듈이 필요합니다.

import csv 

source = "123\tabc\n456\tdef\n789\tghi" 
lines = source.split("\n") 

reader = csv.reader(lines, delimiter='\t') 

print [word for word in [row for row in reader]] 

출력 :

[['123', 'abc'], ['456', 'def'], ['789', 'ghi']] 

필자는 위의 코드에서 쉽게 테스트를 위해 거기에 파일 권리의 내용을 넣어. 개봉 디스크에서 파일 읽기 경우 여러분이이 작업을 수행 할 수 있습니다 (고려 될 수있다 청소기) :

import csv 

reader = csv.reader(open("source.csv"), delimiter='\t') 

print [word for word in [row for row in reader]]