如何将单引号 (') 和 (") 双引号写入 DataFrame 中的文件?

How to write single (') and (") double quotes to file from a DataFrame?

我正在尝试将 DataFrame 写入包含单引号和双引号的单元格的文件中。我使用了 'escapechar' 和 'quotechar' 的组合来实现它但我没有成功:

data_test = pd.DataFrame(np.array([["CD's", 'CD\'sss', 1], ['"', '"', 2], ['one', 'other', 3]]))

with open(outfile, 'w') as output_file:     
    writer = csv.writer(output_file,
        delimiter = '\t',
        lineterminator = '\r\n', 
        quotechar = '\'',
        doublequote=False,
        quoting=csv.QUOTE_NONE, 
        escapechar= '\''
        )
    for i in range(len(data_test)):
        line = data_test.iloc[i]
        writer.writerow(line)      
output_file.close()

我得到的输出在包含单引号的单元格(单元格 [1,1] 和单元格 [1,2])中包含单双引号,但这不是正确的解决方案。

CD''s   CD''sss   1
"       "         2
one     other     3

我正在尝试获取:

CD's    CD'sss    1
"       "         2
one     other     3

关于如何组合单引号和双引号有什么想法吗?

写得有点隐晦,但我觉得是重点:

Dialect.escapechar¶ A one-character string used by the writer to escape the delimiter if quoting is set to QUOTE_NONE and the quotechar if doublequote is False. On reading, the escapechar removes any special meaning from the following character. It defaults to None, which disables escaping.

您应该将转义字符设置为 None。

使用这个:

writer = csv.writer(output_file,
    delimiter = '\t',
    lineterminator = '\r\n',
    quotechar = "\",
    doublequote=False,
    quoting=csv.QUOTE_NONE,
    escapechar="\"
    )

输出

CD's    CD'sss  1

"   "   2

one other   3

你似乎要用嵌入的引号做一些特别的事情会很麻烦。这与您的用例不符。 对它们没有特殊意义:它们只是字符串中的字符,需要逐字逐句地获取,就像所有其他字符一样。它们是数据,而不是可能具有特殊含义的命令行字符串。

删除您的转义处理 - 指示您的作者添加那些特殊含义,并导致不需要的解释。

你为什么不使用 pandas.to_csv

import pandas as pd
import numpy as np
import csv

data_test = pd.DataFrame(np.array([["CD's", 'CD\'sss', 1], ['"', '"', 2], ['one', 'other', 3]]))
data_test.to_csv('out.csv',sep='\t',quoting=csv.QUOTE_NONE,index=False,header=False)

out.csv:

CD's    CD'sss  1
"       "       2
one     other   3

如果需要逐行:

import pandas as pd
import numpy as np
import csv

data_test = pd.DataFrame(np.array([["CD's", 'CD\'sss', 1], ['"', '"', 2], ['one', 'other', 3]]))

with open('out.csv','w',newline='') as output_file:     
    writer = csv.writer(output_file,delimiter='\t',quotechar='',quoting=csv.QUOTE_NONE)
    for line in data_test.as_matrix():
        writer.writerow(line)