2015-02-12 60 views
0

我有一個.txt文件結構的一些數據如下:如何正確讀取本文中的數據到列表中?

Soup Tomato 
Beans Kidney 
. 
. 
. 

我在數據讀取方面與

combo=open("combo.txt","r") 
lines=combo.readlines() 

但是,這些數據隨後出現

lines=['Soup\tTomato\r\n','Beans\tKidney\r\n',...] 

我希望每個條目在列表中都是它自己的元素,如

lines=['Soup','Tomato',...] 

甚至更​​好的是有兩個列表,每列一個。

有人可以提出一種方法來實現這一點或解決我的問題?

+0

你想要'strip。()'和'.split()'。 – 2015-02-12 02:16:44

+0

你確定'線路'的結果嗎? 「Beans \ nKidney \ r \ n''看起來很可疑 - 這個例子看起來更像是'Beans'和'Kidney'之間會有'\ t',而不是'\ n'。 – DSM 2015-02-12 02:31:32

+0

是的,你是對的。我的錯誤是'Beans'和'Kidney'之間有'\ t' – user3600497 2015-02-12 02:38:50

回答

3

你應該分割線:

lines = [a_line.strip().split() for a_line in combo.readlines()] 

使用或不使用readlines方法:

lines = [a_line.strip().split() for a_line in combo] 
+0

非常好的解決方案...但是它沒有做OP所要求的。 – 2015-02-12 13:09:45

1

你看起來像你打開一個CSV標籤delimeted文件。

使用python csv類。

lines = [] 
with open('combo.txt', 'rb') as csvfile:   
    for row in csv.reader(csvfile, delimiter='\t'): 
     lines += row 
print(lines) 

現在作爲列表。

或者你可以反轉它列出的名單...

lines = [] 
with open('combo.txt', 'rb') as csvfile:   
    for row in csv.reader(csvfile, delimiter='\t'): 
     line.append(rows) # gives you a list of lists. 

columns = map(list, zip(*lines)) 
columns[0] = ['Soup','Beans',...]; 
+0

@AdamSmith不在我的Python? – corn3lius 2015-02-12 03:07:48

+0

哎呀,你是對的 - 我以爲你做了'lines.append(row)' – 2015-02-12 03:12:00

+0

我仍然認爲列表是一個比單個列表更好的數據表示。你怎麼知道每一行的內容以及它的內容? – corn3lius 2015-02-12 03:14:51

0

使用csv模塊來處理CSV樣的文件(在這種情況下,製表符分隔值,而不是逗號分隔值) 。

import csv 
import itertools 

with open('path/to/file.tsv') as tsvfile: 
    reader = csv.reader(tsvfile, delimiter="\t") 
    result = list(itertools.chain.from_iterable(reader)) 

csv.reader將您的文件轉換成一個列表的列表,主要有:

def reader(file, delimiter=",") 
    with open('path/to/file.tst') as tsvfile: 
     result = [] 
     for line in tsvfile: 
      sublst = line.strip().split(delimiter) 
      result += sublst 
    return result 
1

如果你想在一個單一的列表中的項目:

>>> with open('combo.txt','r') as f: 
... all_soup = f.read().split() 
... 
>>> all_soup 
['Soup', 'Tomato', 'Beans', 'Kidney'] 

如果你想得到每一列,然後這樣做:

>>> with open('combo.txt','r') as f: 
... all_cols = zip(*(line.strip().split() for line in f)) 
... 
>>> all_cols 
[('Soup', 'Beans'), ('Tomato', 'Kidney')] 
相關問題