所以我有几个csv文件,格式如下:
person,age,nationality,language
Jack,18,Canadian,English
Rahul,25,Indian,Hindi
Mark,50,American,English
Kyou, 21, Japanese, English
我需要导入它,并将该数据作为字典返回,其中键作为第一行中的列标题,每列中的所有数据作为该特定键的值。例如:
dict = {
'person': ['Jack', 'Rahul', 'Mark', 'Kyou'],
'age': [18, 25, 50, 21],
'nationality': ['Canadian', 'Indian', 'American', 'Japanese'],
'language': ['English', 'Hindi', 'English', 'English']
}
我知道如何开始使用这段代码并使代码适用于.csv文件中给出的任意数量的列吗?
答案 0 :(得分:3)
我会选择类似的东西:
import csv
with open('input') as fin:
csvin = csv.reader(fin)
header = next(csvin, [])
print dict(zip(header, zip(*csvin)))
# {'person': ('Jack', 'Rahul', 'Mark', 'Kyou'), 'age': ('18', '25', '50', ' 21'), 'language': ('English', 'Hindi', 'English', ' English'), 'nationality': ('Canadian', 'Indian', 'American', ' Japanese')}
相应调整。
答案 1 :(得分:2)
使用csv模块,我会这样做:
with open('somefile.csv', 'rb') as input_file:
reader = csv.DictReader(input_file)
results = {}
for linedict in reader:
for (key, value) in linedict.iteritems():
results.setdefault(key, []).append(value)
答案 2 :(得分:1)
这是一个使用python CSV模块的相当简单的解决方案(此处为DOC:http://docs.python.org/2/library/csv.html)。只需将'csv_data.csv'替换为CSV文件的名称即可。
import csv
with open('csv_data.csv') as csv_data:
reader = csv.reader(csv_data)
# eliminate blank rows if they exist
rows = [row for row in reader if row]
headings = rows[0] # get headings
person_info = {}
for row in rows[1:]:
# append the dataitem to the end of the dictionary entry
# set the default value of [] if this key has not been seen
for col_header, data_column in zip(headings, row):
person_info.setdefault(col_header, []).append(data_column)
print person_info
答案 3 :(得分:0)
一旦使用csv模块将数据输入到列表列表中,就可以使用压缩与dict理解中的切片相结合。
{col[0] : col[1:] for col in zip(*rows)}