Python 将制表符分隔的文件解析为单独的列表或字符串

Python 将制表符分隔的文件解析为单独的列表或字符串,python,parsing,tabs,delimited,Python,Parsing,Tabs,Delimited,我试图获取一个以制表符分隔的文件,该文件有两列,分别为Name和Age,如下所示: 'Name\tAge\nMark\t32\nMatt\t29\nJohn\t67\nJason\t45\nMatt\t12\nFrank\t11\nFrank\t34\nFrank\t65\nFrank\t78\n' 只需创建两个列表,一个有名称(称为名称,没有标题),一个有年龄(称为年龄,但列表中没有年龄) 我会使用字符串的split和splitlines方法: names = [] ages = [] for

我试图获取一个以制表符分隔的文件,该文件有两列,分别为Name和Age,如下所示:

'Name\tAge\nMark\t32\nMatt\t29\nJohn\t67\nJason\t45\nMatt\t12\nFrank\t11\nFrank\t34\nFrank\t65\nFrank\t78\n'


只需创建两个列表,一个有名称(称为名称,没有标题),一个有年龄(称为年龄,但列表中没有年龄)

我会使用字符串的
split
splitlines
方法:

names = []
ages = []
for name_age in input.splitlines():
    name, age = name_age.strip().split("\t")
    names.append(name)
    ages.append(age)
如果您正在解析更复杂的格式,我建议使用,它也可以处理tsv…但这似乎有点过头了。

使用,您可能会执行以下操作:

import csv

names=[]
ages=[]
with open('data.csv','r') as f:
    next(f) # skip headings
    reader=csv.reader(f,delimiter='\t')
    for name,age in reader:
        names.append(name)
        ages.append(age) 

print(names)
# ('Mark', 'Matt', 'John', 'Jason', 'Matt', 'Frank', 'Frank', 'Frank', 'Frank')
print(ages)
# ('32', '29', '67', '45', '12', '11', '34', '65', '78')

制表符分隔的数据位于
csv
模块的域中:

>>> corpus = 'Name\tAge\nMark\t32\nMatt\t29\nJohn\t67\nJason\t45\nMatt\t12\nFrank\t11\nFrank\t34\nFrank\t65\nFrank\t78\n'
>>> import StringIO
>>> infile = StringIO.StringIO(corpus)
假装
infle
只是一个普通的
文件

>>> import csv
>>> r = csv.DictReader(infile, 
...                    dialect=csv.Sniffer().sniff(infile.read(1000)))
>>> infile.seek(0)
您甚至不必告诉csv模块有关标题和分隔符格式的信息,csv模块将自行解决

>>> names, ages = [],[]
>>> for row in r:
...     names.append(row['Name'])
...     ages.append(row['Age'])
... 
>>> names
['Mark', 'Matt', 'John', 'Jason', 'Matt', 'Frank', 'Frank', 'Frank', 'Frank']
>>> ages
['32', '29', '67', '45', '12', '11', '34', '65', '78']
>>> 

Unutbu的答案使用列表压缩:

names = [x[0] for x in csv.reader(open(filename,'r'),delimiter='\t')]
ages = [x[1] for x in csv.reader(open(filename,'r'),delimiter='\t')]

马文的回答,但没有把整个文件读两遍

data = [ (x[0],x[1]) for x in csv.reader(open(filename,'r'),delimiter='\t')]
如果你同意它是元组,而不是两个列表

您仍然可以在一次过程中将数据读入两个列表,这将是unubtu的答案