我有一个输出我写的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,这会解决,但这会添加一个字符来代替引号。
有什么想法吗?
答案 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)
separator
或delimiter
。这就是为什么双引号会自动转义的原因。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
的名称。希望能有所帮助;)