在Python中如何根据特定值将文件解析为列表?

1 投票
4 回答
2376 浏览
提问于 2025-04-16 21:22

我有一个很大的以制表符分隔的文本文件,假设我们叫它 john_file:

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

有没有什么简单的方法可以根据名字(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'] 等等里面。

撰写回答