【发布时间】:2019-09-15 00:31:26
【问题描述】:
我有一个 csv 文件,我想将它写入另一个 csv 文件。 这比看起来要复杂一些。希望有人更正我的代码并重写它,以便我可以获得所需的 csvfile。我正在使用 python 2 和 3 两个版本。
mycsvfile:
id,field1,point_x,point_y,point_z
a1,x1,10,12,3
b1,x2,20,22,5
a2,x1,25,17,7
a1,x2,35,13,3
a1,x5,15,19,9
b1,x1,65,11,2
b2,x5,50,23,1
b2,x1,75,17,7
c1,x2,70,87,2
c2,x1,80,67,4
c3,x2,85,51,6
我的代码:
import os
import csv
import collections
from csv import DictWriter
with open(r'C:\Users\Desktop\kar_csv_test\workfiles\incsv.csv', 'r') as csvfile:
reader = csv.reader(csvfile, delimiter=',')
my_dict = collections.defaultdict(dict)
for row in reader:
my_dict[row[0]][row[1]] = [row[2],row[3],row[4]]
print (my_dict)
with open(r'C:\Users\Desktop\kar_csv_test\workfiles\outcsv.csv','w', newline='') as wf:
fieldnames = ['id', 'x1(point_x)', 'x1(point_y)', 'x1(point_z)', 'x2(point_x)', 'x2(point_y)', 'x2(point_z)'] # >>>>>>etc, till x20(point_x), x20(point_y), x20(point_z)
my_write = csv.DictWriter(wf, fieldnames = fieldnames, delimiter = ',')
my_write.writeheader()
Desired output as csv file:
id,x1(point_x),x1(point_y),x1(point_z),x2(point_x),x2(point_y),x2(point_z)
a1,10,12,3,35,13,3,
a2,25,17,7,,,,
b1,65,11,2,20,22,5,
b2,75,17,7,,,,
c1,,,,70,87,2,
c2,80,67,4,,,,
c3,,,,85,51,6,
【问题讨论】:
-
你说你同时使用两个python版本是什么意思?此外,您应该考虑重组您的问题。不知为何需要这样的结构(嵌套字典)以及这些额外列的来源。
-
@trotta,如果你使用 csvdictionaries,它在 python3 和 python2 中的排序有点不同,这就是我所理解的。如果不需要嵌套字典。没关系。请写下你的代码。可能有许多不同的方法来完成所需的工作。这一切都是为了获得所需的csvfile,我认为它需要。请同时查看这些数字(mycsvfile 和 Desiredcsvfile),以更好地了解该问题。
-
必须是
.csv文件吗?您是否考虑过简单地腌制您的 Python 对象或写入 HDF? -
@jeschwar,是的,它必须是一个 csv 文件
标签: python pandas csv dictionary