2010-03-09 51 views
3

我在製表符分隔格式的文件尾隨換行符,例如,Python的 - 文件內容嵌套列表

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字符的等效列表。

任何幫助?

問候, 小號;-)

+2

當迭代文本文件時,不需要'.readlines()'。另外你的'ls_platform_ann' **不會**創建​​嵌套列表。或者你沒有向我們展示所有相關的代碼 – SilentGhost 2010-03-09 16:32:58

回答

3

另一種選擇,不涉及csv模塊:

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