Python 在运行时将文件中的每个段落读入多个列表
假设我有一个文件,比如Python 在运行时将文件中的每个段落读入多个列表,python,file,list,Python,File,List,假设我有一个文件,比如 ID1 Some name Address Salary Gender ID2 Some name Address Salary Gender ... IDn 我已经阅读了文件,对其进行了排序,并将所有字段添加到一个列表中,如 [ID1 , name,Address,Salary,Gender,ID2,name,Address,Salart,Gender..] 我需要的是一份清单,上面写着 ID1= [name,address,Salary,
ID1
Some name
Address
Salary
Gender
ID2
Some name
Address
Salary
Gender
...
IDn
我已经阅读了文件,对其进行了排序,并将所有字段添加到一个列表中,如
[ID1 , name,Address,Salary,Gender,ID2,name,Address,Salart,Gender..]
我需要的是一份清单,上面写着
ID1= [name,address,Salary,Gender] ,
ID2 = [name,Address,salary,Gender] and so on.
如果列表中已包含这些词典,则需要使用以下命令创建词典: 你最终会得到:
>>> the_list
['ID1', 'name1', 'address1', 'salary1', 'gender1', 'ID2', 'name2', 'address2',
'salary2', 'gender2']
>>> ids = {i[0]: i[1:] for i in grouper(the_list, 5)}
>>> ids
{'ID2': ('name2', 'address2', 'salary2', 'gender2'), 'ID1': ('name1', 'address1'
, 'salary1', 'gender1')}
您正在迭代的数据是一个文件对象。您可以对其应用所有技巧,将数据重新格式化为索引键
ID
所以你从发电机开始。此生成器将删除所有非空行。然后,您只需迭代这个生成器,并使用字典理解创建一个字典。使用将迭代器提升到一定程度,留下下一项作为键使用
实施
from itertools import imap, islice
with open("data") as fin:
data = (line for line in imap(str.strip, fin) if line)
data = {line: list(islice(data, 0, 4)) for line in data}
输出
print data
{'ID2': ['Some name', 'Address', 'Salary', 'Gender'], 'ID1': ['Some name', 'Address', 'Salary', 'Gender']}
如果是您正在创建的文件,我建议使用foramt,从该文件生成简单的dict结构将非常容易。@KobiK:让我试试看。!!
print data
{'ID2': ['Some name', 'Address', 'Salary', 'Gender'], 'ID1': ['Some name', 'Address', 'Salary', 'Gender']}