【问题标题】:Extra characters being added when writing a CSV [duplicate]编写 CSV 时添加的额外字符 [重复]
【发布时间】:2014-11-06 10:07:09
【问题描述】:

我目前正在使用 python,读取一个 CSV 文件,然后将最后一列写入另一个 CSV 文件。

我的读写代码是:

with open('source.csv', 'rb') as csvfile:
    rdr = csv.reader(csvfile, delimiter=',', quotechar='|')
    with open('result.csv', 'wb') as result:
        wtr = csv.writer(result, delimiter=',', quotechar='|' )
        for r in rdr:
            wtr.writerow((r[2]))

输入看起来像这样:

#SYMBOL_NAME,TIMESTAMP,VALUE
,20140909230500.000000,0.000000
,20140909231000.000000,0.000000
,20140909231500.000000,0.000000
,20140909232000.000000,0.000000
,20140909232500.000000,0.000000

我对时间戳不感兴趣,并且由于生成它的软件,在这种情况下,符号名称是一个空列。

我希望我的输出是这样的:

VALUE
0.000000
0.000000
0.000000
0.000000
0.000000

但是我实际上得到了这个:

V,A,L,U,E
0,.,0,0,0,0,0,0
0,.,0,0,0,0,0,0
0,.,0,0,0,0,0,0
0,.,0,0,0,0,0,0
0,.,0,0,0,0,0,0

现在我很确定这是因为 csv.writer 部分中的 delimiter=','。但是,当我尝试设置 delimiter='' 来删除逗号时,我被告知它必须至少是一个字符串。

当我一起删除 delimiter 参数时,我得到完全相同的输出。

【问题讨论】:

  • 您的原始代码非常接近。您似乎试图根据代码中的附加括号创建一个元组。如果您刚刚这样做,它会起作用:wtr.writerow((r[2],))(尽管下面的列表解决方案更好)。请参阅Returning tuple with a single item from a function 了解更多信息。
  • 额外的括号来自我在谷歌搜索如何仅在 csv 中写入列时发现的另一个问题。我可能应该研究一下我的案例与该问题中的案例之间的区别,因为他试图删除一列(因此将他想保留的列放在双括号中),而我想保留一个并删除其余的.我认为尼科和你有同样的想法,他的灵魂奏效了。但是感谢您的链接,它很有帮助。

标签: python parsing csv


【解决方案1】:

writerow() 需要一个列表作为参数。 当你给一个这样的字符串时......

wtr.writerow((r[2]))

...它将字符串字符解释为列表项并将它们作为单独的列放入csv中。 改为这样做

wtr.writerow([r[2]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2021-06-22
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多