写入CSV而不获取引号,escapcehar错误

时间:2017-01-05 23:36:19

标签: python python-3.x csv

我有一个输出我写的CSV。我需要添加csv.QUOTE_NONE,但如果没有产生错误,我似乎无法找到正确的位置。

可变

variable = ['20', '10', '30,30']

注意:我使用的一些变量将包含字符串,即 ['Test','Output', '100']

with open('file.csv', 'w') as csv_file:
    writerc = csv.writer(csv_file)
    for item in variable():
        writerc.writerow(item)

使用上述代码时,它会在CSV中生成以下行。

20,10,"30,30"

所需的写作是:

20,30,30,30

如果我使用quoting=csv.QUOTE_NONE,我会收到一个escapechar错误_csv.Error: need to escape, but no escapechar set - 如果我设置了一个escapechar,这会解决,但这会添加一个字符来代替引号。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以在编写数据之前尝试进一步拆分数据。这样可以避免需要自动使用引号字符。

它的工作原理是创建一个可能包含多个新拆分条目的新值列表,例如'30,30'将成为['30', '30']。接下来,它使用Python的chain函数将这些子列表展平为一个列表,然后将其写入输出CSV文件。

import itertools
import csv

data = [['20', '10', '30,30'], ['Test','Output', '100']]

with open('file.csv', 'wb') as f_output:
    csv_output = csv.writer(f_output)

    for line in data:
        csv_output.writerow(list(itertools.chain.from_iterable(v.split(',') for v in line)))

这会给你以下file.csv

20,10,30,30
Test,Output,100

答案 1 :(得分:0)

  • 我认为问题在于.csv表示逗号分隔 值,因此它将值中的“,”视为separatordelimiter。这就是为什么双引号会自动转义的原因。
  • 我建议您使用pandas库,这样可以更轻松地处理此问题。

代码

import pandas as pd

df = pd.DataFrame({'variable' : ['20', '10', '30,30']})
# Note that I use '\t' as the separator instead of ',' and get a .tsv file which
# is essentially the same as .csv file except the separator.
df.to_csv(sep = '\t', path_or_buf='file.tsv', index=False)

您可以在this中看到使用这两个分隔符的区别。另一件事是,我认为您的代码建议您使用variable 作为column的名称,但是您的输出建议您使用variable作为row(或index)的名称。无论如何,我的答案是基于您使用variable的假设 作为column的名称。希望能有所帮助;)