我在txt文件中有一些数据,我想把它加载到一个dicts列表中。我通常会使用csv.ReadDict(open('file'))
,但是这些数据在第一行中没有键值。相反,它在数据实际开始之前已经注释掉了许多行。此外,有时,注释行不会始终位于文件的开头,但可能位于文件的末尾。
但是,所有行应始终具有相同的字段,我想我可以对这些字段名称(或键值)进行硬编码,因为它们不应该更改。
示例日期
# twitter data
# retrieved at: 07.08.2014
# total number of records: 5
# exported by: userXYZ
# fields: date, time, username, source
10.12.2013; 02:00; tweeterA; web
10.12.2013; 02:01; tweeterB; iPhone
10.13.2013; 02:04; tweeterC; android
10.13.2013; 02:08; tweeterC; web
10.13.2013; 02:10; tweeterD; iPhone
以下是我迄今为止能够弄清楚的内容,但我需要一些帮助才能解决问题。
我的代码
header = ['date', 'time', 'username', 'source']
data = []
for line in open('data.txt'):
if not line.startswith('#'):
data.append(line)
所需格式
[{'date':'10.12.2013', 'time':'02:00', 'username':'tweeterA', 'source':,'web'},
{'date':'10.12.2013', 'time':'02:01', 'username':'tweeterB', 'source':,'iPhone'},
{'date':'10.12.2013', 'time':'02:04', 'username':'tweeterC', 'source':,'android'},
{'date':'10.12.2013', 'time':'02:08', 'username':'tweeterC', 'source':,'web'},
{'date':'10.12.2013', 'time':'02:10', 'username':'tweeterD', 'source':,'iPhone'}]
答案 0 :(得分:2)
如果你想要一个dicts列表,其中每个dict对应一行,试试这个:
list_of_dicts = [{key: value for (key, value) in zip(header, line.strip().split('; '))} for line in open('abcd.txt') if not line.strip().startswith('#')]
答案 1 :(得分:0)
for line in open('data.txt'):
if not line.startswith('#'):
data.append(line.split("; "))
至少假设我理解正确
或更简洁
data = [line.split("; ") for line in open("data.txt") if not line.strip().startswith("#")]
list_of_dicts = map(lambda row:dict(zip(header,row)),data)
取决于您的python版本,您可以从地图返回迭代器,在这种情况下只需执行
list_of_dicts = list(map(lambda row:dict(zip(header,row)),data))