在 python 中将 csv 文件数据转换为字典然后将该字典写入另一个 csv 文件时出现问题
Issue in converting a csv file data into dictionary and then writing that dictionary into another csv file in python
我有一个 csv 文件,file1.csv,其中包含以下示例数据:
state,year,value
Alabama,2012,8.03333333333
Alabama,2012,8.16666666667
Alabama,2012,8.06666666667
Alabama,2012,7.7
Alabama,2013,7.36666666667
Alabama,2013,7.0
Alabama,2013,7.0
Alabama,2013,7.13333333333
Alabama,2014,7.2
Alabama,2014,6.93333333333
Alabama,2014,6.46666666667
Alabama,2014,6.13333333333
Alaska,2012,7.33333333333
Alaska,2012,7.16666666667
Alaska,2012,7.06666666667
现在我想要的是为每个州创建一条记录,在一行中包含该州的所有值,然后将结果写入新的 csv 文件。所以我想要的输出是这样的:
Alabama,8.0,8.1,8.0,7.7,7.3,7.0,7.0
Alaska,8.1,8.1,8.0,7.4,7.25,7.6,7.5
我写了这段代码,其中我从输入 csv 文件中的记录形成了一个 defaultdict
,然后将该字典写入输出 csv 文件,但是当我将其写入输出文件时,输出文件中的值被包围[]
和 "
并且每个值本身都被 '
包围。所以当前输出看起来像:
Indiana,"['8.4', '8.2', '8.2', '8.33333333333', '8.3', '7.8', '7.2', '6.53333333333', '6.1', '5.96666666667', '5.8', '5.86666666667']"
Maryland,"['6.9', '6.9', '6.86666666667', '6.8', '6.76666666667', '6.63333333333', '6.43333333333', '6.2', '5.96666666667', '5.83333333333', '5.7', '5.53333333333']"
我当前的代码是:
file_write = open('output.csv', 'w')
writer = csv.writer(file_write)
with open('file1.csv', 'r') as handle:
reader = csv.DictReader(handle, ['state', 'year', 'value'])
data = defaultdict(list)
for line in reader:
data[line['state']].append(line['value'])
for key, value in data.items():
print key
print value
writer.writerow([key, value])
如何更正输出格式?
要解决您的问题,您应该更换
writer.writerow([key, value])
和
writer.writerow([key] + value)
正如 Mathias Ettinger 在评论中所写。
当你写
[key, value]
您创建了一个包含两个元素的列表。第一个元素 key
对象和第二个元素嵌套列表 value
.
而不是它,您需要创建一个列表,其中包含 key
和 value
列表中的所有元素。
我有一个 csv 文件,file1.csv,其中包含以下示例数据:
state,year,value
Alabama,2012,8.03333333333
Alabama,2012,8.16666666667
Alabama,2012,8.06666666667
Alabama,2012,7.7
Alabama,2013,7.36666666667
Alabama,2013,7.0
Alabama,2013,7.0
Alabama,2013,7.13333333333
Alabama,2014,7.2
Alabama,2014,6.93333333333
Alabama,2014,6.46666666667
Alabama,2014,6.13333333333
Alaska,2012,7.33333333333
Alaska,2012,7.16666666667
Alaska,2012,7.06666666667
现在我想要的是为每个州创建一条记录,在一行中包含该州的所有值,然后将结果写入新的 csv 文件。所以我想要的输出是这样的:
Alabama,8.0,8.1,8.0,7.7,7.3,7.0,7.0
Alaska,8.1,8.1,8.0,7.4,7.25,7.6,7.5
我写了这段代码,其中我从输入 csv 文件中的记录形成了一个 defaultdict
,然后将该字典写入输出 csv 文件,但是当我将其写入输出文件时,输出文件中的值被包围[]
和 "
并且每个值本身都被 '
包围。所以当前输出看起来像:
Indiana,"['8.4', '8.2', '8.2', '8.33333333333', '8.3', '7.8', '7.2', '6.53333333333', '6.1', '5.96666666667', '5.8', '5.86666666667']"
Maryland,"['6.9', '6.9', '6.86666666667', '6.8', '6.76666666667', '6.63333333333', '6.43333333333', '6.2', '5.96666666667', '5.83333333333', '5.7', '5.53333333333']"
我当前的代码是:
file_write = open('output.csv', 'w')
writer = csv.writer(file_write)
with open('file1.csv', 'r') as handle:
reader = csv.DictReader(handle, ['state', 'year', 'value'])
data = defaultdict(list)
for line in reader:
data[line['state']].append(line['value'])
for key, value in data.items():
print key
print value
writer.writerow([key, value])
如何更正输出格式?
要解决您的问题,您应该更换
writer.writerow([key, value])
和
writer.writerow([key] + value)
正如 Mathias Ettinger 在评论中所写。
当你写
[key, value]
您创建了一个包含两个元素的列表。第一个元素 key
对象和第二个元素嵌套列表 value
.
而不是它,您需要创建一个列表,其中包含 key
和 value
列表中的所有元素。