例如,我的 csv 有如下列:
ID, ID2, Date, Job No, Code
我需要以相同的顺序写回这些列。 dict
立即混淆了顺序,所以我相信这更多的是读者的问题。
最佳答案
Python 的 dict
在 3.6 之前不保持顺序(但无论如何,在那个版本中,csv.DictReader
类被修改为返回 OrderedDict
s)。
但是,您正在使用的 csv.DictReader
实例(在您阅读了第一行之后!-)确实有一个 .fieldnames
字符串列表,按顺序IS。
所以,
for rowdict in myReader:
print ['%s:%s' % (f, rowdict[f]) for f in myReader.fieldnames]
会告诉你顺序确实被维护了(当然在 .fieldnames
中,NEVER 在 dict
中——这在本质上是不可能的Python!-)。
因此,假设您要读取 a.csv
并以相同的列顺序写入 b.csv
。使用普通的 reader 和 writer 太容易了,所以你想使用 Dict 变体;-)。好吧,一种方法是……:
import csv
a = open('a.csv', 'r')
b = open('b.csv', 'w')
ra = csv.DictReader(a)
wb = csv.DictWriter(b, None)
for d in ra:
if wb.fieldnames is None:
# initialize and write b's headers
dh = dict((h, h) for h in ra.fieldnames)
wb.fieldnames = ra.fieldnames
wb.writerow(dh)
wb.writerow(d)
b.close()
a.close()
假设您在 a.csv
中有标题(否则您不能在其上使用 DictReader)并且只希望在 b.csv
中有相同的标题。
关于python - 是否可以使用 csv.DictReader 保持列顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1885324/