我在.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 :(得分: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