如何正确读取本文中的数据到列表中?
问题描述:
我有一个.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',...]
甚至更好的是有两个列表,每列一个。
有人可以提出一种方法来实现这一点或解决我的问题?
答
你应该分割线:
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',...];
答
使用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')]
你想要'strip。()'和'.split()'。 – 2015-02-12 02:16:44
你确定'线路'的结果吗? “Beans \ nKidney \ r \ n''看起来很可疑 - 这个例子看起来更像是'Beans'和'Kidney'之间会有'\ t',而不是'\ n'。 – DSM 2015-02-12 02:31:32
是的,你是对的。我的错误是'Beans'和'Kidney'之间有'\ t' – user3600497 2015-02-12 02:38:50