从txt文件中获取数据,parsing并放入CSV
我一直在网上寻找一个解决我的确切问题,但所有的答案都过时了。 我有一个文本文件包含这种forms的数据:
第一个名字:xxx
中间名:xxx
姓:xxx
生日:xxx
高度:xxx
重量:xxx
地址:xxx
CITY,STATE ZIP:xxx
文件中有多个条目。 我需要从“xxx”中获取数据,基本上每个“:”后的所有数据都放在一行中,每个“xxx”用逗号隔开。 这是我可以使用它作为一个CSV文件。 我想把这个信息放入Excel工作表中。
所以我希望它看起来像这样:
firstname,middlename,lastname,birthday,height,weight,address,citystatezip
这就是我所拥有的,我不知道从哪里走。
with open('info.txt') as file: for rec in file: print rec.split(':')[1]
这段代码只是假设在“:”后面打印每个东西。 我不能真正把它工作,也不知道我将如何把它放在我想要的格式。
假设你有:
$ cat file.csv FIRST NAME: xxx MIDDLE NAME: xxx LAST NAME: xxx BIRTHDAY: xxx HEIGHT: xxx WEIGHT: xxx ADDRESS: xxx CITY, STATE ZIP: xxx
你可以做:
with open('file.csv') as f: data=[[e.strip() for e in line.split(':')] for line in f] print zip(*data)
打印:
[('FIRST NAME', 'MIDDLE NAME', 'LAST NAME', 'BIRTHDAY', 'HEIGHT', 'WEIGHT', 'ADDRESS', 'CITY, STATE ZIP'), ('xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx')]
zip
调换matrix,使标题在顶部。
那么你可以这样做:
>>> zip(*data)[0] ('FIRST NAME', 'MIDDLE NAME', 'LAST NAME', 'BIRTHDAY', 'HEIGHT', 'WEIGHT', 'ADDRESS', 'CITY, STATE ZIP')
然后得到你想要的东西:
>>> ','.join([e.replace(' ','').replace(',','').lower() for e in zip(*data)[0]]) firstname,middlename,lastname,birthday,height,weight,address,citystatezip
如果你想第一列(冒号后的项目),你可以做同样的方法:
>>> ','.join([e.replace(' ','').replace(',','').lower() for e in zip(*data)[1]]) xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx
或者更简单地说:
>>> ','.join(zip(*data)[1])