如何将单引号 (') 和 (") 双引号写入 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)
我正在尝试将 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)