我有一个CSV文件,如:
我想使用Python转换为字典,字典应如下所示:
[{'Type': ['Date'], 'Value': ['dd/mm/yyyy']},
{'Type': ['Gender'], 'Value': ['Male', 'Female']},
{'Type': ['Title'], 'Value': ['Mr.', 'Mrs.', 'Ms.']}]
目前我已尝试过以下方法:
import csv
import collections
with open('test2.csv', 'rU') as fin:
reader = csv.DictReader(fin)
data = []
for row in reader:
data.append(row)
print data
输出是:
[{'Type': 'Date', 'Value': 'dd/mm/yyyy'},
{'Type': 'Gender', 'Value': 'Male'},
{'Type': '', 'Value': 'Female'},
{'Type': 'Title', 'Value': 'Mr.'},
{'Type': '', 'Value': 'Mrs.'},
{'Type': '', 'Value': 'Ms.'}]
答案 0 :(得分:0)
试试这个:
import csv
data=[]
with open(fn, 'rU') as fin:
reader=csv.reader(fin, dialect='excel')
header=next(reader)
for row in reader:
di={k:[v] for k,v in zip(header, row)}
if di[header[0]]==['']:
data[-1][header[1]].extend(di[header[1]])
else:
data.append(di)
>>> data
[{'Type': ['Date'], 'Value': ['dd/mm/yyyy']}, {'Type': ['Gender'], 'Value': ['Male', 'Female']}, {'Type': ['Title'], 'Value': ['Mr.', 'Mrs', 'Ms']}]
答案 1 :(得分:0)
您可能需要阅读并手动解析它。
我假设您总是期望两列,如果类型为空,则使用上一行的类型。
作为替代方案,可能值得更改格式并使A列中的值成为必需(如果它是您控制的),这可以解决您的一些问题,但不是全部,您仍然需要重新集中来自csv阅读器的结果
答案 2 :(得分:0)
import csv
from pprint import pprint
with open('test.csv','r') as test_file:
reader = csv.reader(test_file, delimiter=',')
output = []
last_key = None
for row in reader:
if row[0]:
last_key = row[0]
output.append({row[0]:[row[1]]})
else:
output[-1][last_key].append(row[1])
pprint(output)
>>>
[{'Type': ['Value']},
{'Date': ['dd/mm/yy']},
{'Gender': ['Male', 'Female']},
{'Title': ['Mr.', 'Mrs.', 'Ms.']}]
答案 3 :(得分:0)
如果您知道您的csv将是两列,并且您知道它将始终按照您显示的方式进行良好分组,那么手动构建字典可能最简单。诀窍是,当第1列中没有值时,您想要使用先前已知的值。
from collections import defaultdict
import csv
last_key = None
data = defaultdict(list)
with open('test2.csv', 'rU') as fin:
csv_reader = csv.reader(fin, delimiter=',')
for row in csv_reader:
key, value = row[0], row[1]
if key:
data[key].append(value)
last_key = key
else:
data[last_key].append(value)