【问题标题】:Re-ordering columns in a CSV file with a specified delimiter character使用指定的分隔符对 CSV 文件中的列重新排序
【发布时间】:2018-06-22 15:39:42
【问题描述】:

基本上,我想完成与批准的答案here 中解决的完全相同的任务。

但是,如果输入 CSV 文件使用分号作为分隔符,此解决方案不适用于我。我试图将代码更改为

writer = csv.DictWriter(outfile, fieldnames=fieldnames,  delimiter = ';')

但它并不能解决问题,只会生成一个带有新顺序、良好标题但空数据(即只写入分隔符)的 CSV。

很抱歉创建了一个副本,但考虑到原始帖子的年龄,我怀疑有人会注意到我的问题/评论。

我正在使用以下代码:

#!/usr/bin/env python3

import sys, os, csv

def reorder():
    with open('in.csv', 'r') as infile, open('out.csv', 'a') as outfile:
        fieldnames = ['A', 'C', 'D', 'E', 'B']
        writer = csv.DictWriter(outfile, fieldnames=fieldnames, delimiter = ';')
        writer.writeheader()
        for row in csv.DictReader(infile):
            writer.writerow(row)

def main():
    reorder()

# standard boilerplate to call the main() function to begin the program
if __name__ == '__main__':
    main()

给定in.csv 具有以下内容不会产生好的结果:

A;B;C;D;E
a1;b1;c1;d1;e1
a2;b2;c2;d2;e2

用逗号替换分号会产生好的结果。

更新:

我改变了相应的代码如下,它的工作原理:

    with open('in.csv', 'r') as infile, open('out.csv', 'w') as outfile:
        reader = csv.DictReader(infile, fieldnames = ['A', 'B', 'C', 'D', 'E'], delimiter=';')

        fieldnames = ['A', 'C', 'D', 'E', 'B']
        writer = csv.DictWriter(outfile, fieldnames=fieldnames, delimiter=';')
        writer.writeheader()
        for row in reader:
            writer.writerow(row)

【问题讨论】:

  • 你能发布示例数据和预期输出吗?
  • 既然你声称这不是另一个问题的重复,请edit你的问题并添加all你正在使用的代码,一个示例输入文件,以及它生成的文件的(不正确的)内容。

标签: python csv


【解决方案1】:

查看您的 DictReader 正在生成什么。您还需要将delimiter=';' 添加到读者,而不仅仅是作者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-29
    • 2022-11-04
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多