写入CSV而没有获得引号,escapcehar错误

yk9xbfzb  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(76)

我有一个输出,我正在写一个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,这个错误会得到解决,但是这会在引号的位置添加一个字符。
有什么想法吗?

xkftehaa

xkftehaa1#

你可以尝试在写数据之前进一步拆分数据。这将避免自动使用引号字符。
它的工作原理是创建一个新的值列表,其中可能包含多个新的拆分条目,例如,您的'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

vuv7lop3

vuv7lop32#

  • 我认为问题在于.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)

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

相关问题