python - 是否可以使用 csv.DictReader 保持列顺序?

标签 python csv

例如,我的 csv 有如下列:

ID, ID2, Date, Job No, Code

我需要以相同的顺序写回这些列。 dict 立即混淆了顺序,所以我相信这更多的是读者的问题。

最佳答案

Python 的 dict 在 3.6 之前不保持顺序(但无论如何,在那个版本中,csv.DictReader 类被修改为返回 OrderedDicts)。

但是,您正在使用的 csv.DictReader 实例(在您阅读了第一行之后!-)确实有一个 .fieldnames 字符串列表,按顺序IS

所以,

for rowdict in myReader:
  print ['%s:%s' % (f, rowdict[f]) for f in myReader.fieldnames]

会告诉你顺序确实被维护了(当然在 .fieldnames 中,NEVERdict 中——这在本质上是不可能的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/

相关文章:

c# - 使用正则表达式像字符串一样拆分 csv

python - 下载CSV文件到客户端

python - 如何在步骤函数 Lambda 调用中将上下文对象与任务输入结合起来?

python - Pandas :过滤值出现在对的两端,但不在组内

java - 如何为 csv java 记录器文件设置 header 。使用记录器 java.util.logging.Logger

excel - 加载 csv "Could not find installable ISAM"

Python pandas 数据帧输出格式

python - 抓取谷歌网络结果不起作用

python - 在 python 中排序字符串不起作用

python - 依赖 python 的 with...as 语句是一种好习惯吗