Python的dict
不会在3.6之前保持顺序(但是,无论该版本如何,csv.DictReader
该类都被修改为返回OrderedDict
s)。
然而,实例csv.DictReader
您使用(你读过的第一行后- !) 有一个.fieldnames
字符串列表,其中 秩序。
所以,
for rowdict in myReader:
print ['%s:%s' % (f, rowdict[f]) for f in myReader.fieldnames]
会告诉你的是,为了确实维护(中.fieldnames
当然, 千万不要 在dict
-这是在Python本质上是不可能的- - !)。
因此,假设您要以相同的列顺序进行a.csv
读写b.csv
。使用普通的读取器和写入器太容易了,因此您想使用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
。