如何正确读入此文本数据到列表?

时间:2015-02-12 02:14:10

标签: python

我在.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',...]

更好的是拥有两个列表,每列一个。

有人可以建议一种方法来实现这个目标或解决我的问题吗?

4 个答案:

答案 0 :(得分:3)

你应该拆分行:

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

或者不使用readlines:

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

答案 1 :(得分:1)

您看起来像是在打开csv制表符分隔文件。

使用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',...];

答案 2 :(得分: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')]

答案 3 :(得分: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