首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将制表符分隔的文件解析为单独的列表或字符串

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

Stack Overflow用户
提问于 2011-09-30 10:27:03
回答 5查看 63.5K关注 0票数 15

我正在尝试获取一个以制表符分隔的文件,其中包含两列: Name和Age,读入内容如下:

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

只需创建两个列表,一个包含姓名(称为姓名,不带标题),另一个带有年龄(称为年龄,但列表中没有年龄)。

EN

回答 5

Stack Overflow用户

发布于 2011-09-30 10:34:41

使用csv module,您可能会这样做:

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')
票数 20
EN

Stack Overflow用户

发布于 2011-09-30 10:41:26

制表符分隔的数据在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)

假装infile只是一个普通的file

>>> import csv
>>> r = csv.DictReader(infile, 
...                    dialect=csv.Sniffer().sniff(infile.read(1000)))
>>> infile.seek(0)

您甚至不必告诉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']
>>> 
票数 10
EN

Stack Overflow用户

发布于 2011-09-30 10:32:50

我将使用字符串的splitsplitlines方法:

names = []
ages = []
for name_age in input.splitlines():
    name, age = name_age.strip().split("\t")
    names.append(name)
    ages.append(age)

如果您要解析更复杂的格式,我建议您使用the csv module,它也可以处理tsv…但这看起来有点过头了。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7605374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档