在Python中如何根据特定值将文件解析为列表?
我有一个很大的以制表符分隔的文本文件,假设我们叫它 john_file:
1 john1 23 54 54
2 john2 34 45 66
3 john3 35 43 54
4 john2 34 54 785 john1 12 34 65
6 john3 34 55 66
有没有什么简单的方法可以根据名字(john1、john2 或 john3)把这个文件分成 3 个列表?
fh=open('john_file.txt','r').readlines()
john1_list=[]
for i in fh:
if i.split('\t')[1] == "john1":
john1_list.append(i)
提前谢谢你
4 个回答
0
你可以这样做:
fh=open('john_file.txt','r').readlines()
john_lists={}
for i in fh:
j=i.split('\t')[1]
if j not in johns:
john_lists[j]=[]
johns[j].append(i)
这样做的好处是,你不需要提前知道第二列可能有哪些值。
正如其他人提到的,你也可以使用 defaultdict
来实现
from collections import defaultdict
fh=open('john_file.txt','r').readlines()
john_lists=defaultdict(list)
for i in fh:
j=i.split('\t')[1]
johns[j].append(i)
0
>>> from collections import defaultdict
>>> a = defaultdict(list)
>>> for line in '''1 john1 23 54 54
... 2 john2 34 45 66
... 3 john3 35 43 54
... 4 john2 34 54 78
... 5 john1 12 34 65
... 6 john3 34 55 66
... '''.split('\n'):
... data = filter(None, line.split())
... if data:
... a[data[1]].append(data)
...
>>> data
[]
>>> a
defaultdict(<type 'list'>, {'john1': [['1', 'john1', '23', '54', '54'], ['5', 'john1', '12', '34', '65']], 'john2': [['2', 'john2', '34', '45', '66'], ['4', 'john2', '34', '54', '78']], 'john3': [['3', 'john3', '35', '43', '54'], ['6', 'john3', '34', '55', '66']]})
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。
6
from collections import defaultdict
d = defaultdict(list)
with open('john_file.txt') as f:
for line in f:
fields = line.split('\t')
d[fields[1]].append(line)
这些单独的列表会放在 d['john1']
、d['john2']
等等里面。