如何正确读取本文中的数据到列表中?

问题描述:

我有一个.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

你应该分割线:

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

你看起来像你打开一个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

使用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 

如果你想在一个单一的列表中的项目:

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