在pandas中保持字段中含引号的文件原样不变

1 投票
1 回答
31 浏览
提问于 2025-04-14 16:42

我尝试了很多方法,但就是无法把输入文件中的引号保留到输出文件里。

可以复现的代码:

# Input file
csv_data = '''A,B,C,D,E
234,mno,C22,U,
567,pqr,"C3""",U,5555
999,abc,"C99",D,9999
'''

# Load CSV data into dataframes
df = pd.read_csv(StringIO(csv_data), header=0, dtype=str, keep_default_na=False, engine='python', sep=',')

df.to_csv('output.txt', sep=',', index=False, header=True)

现在,output.txt 的内容是:

A,B,C,D,E
234,mno,C22,U,
567,pqr,"C3""",U,5555
999,abc,C99,D,9999

我希望的输出是:

A,B,C,D,E
234,mno,C22,U,
567,pqr,"C3""",U,5555
999,abc,"C99",D,9999

我就是不想在保存的时候丢失输入数据中的任何东西,包括引号。

1 个回答

2

在使用 pd.read_csvdf.to_csv 这两个函数时,可以添加一个叫做 quoting 的参数,并把它设置为 3(也就是 QUOTE_NONE)。这样做的目的是为了控制如何处理文本中的引号。

# Load CSV data into dataframes
df = pd.read_csv(StringIO(csv_data), 
                 header=0, 
                 dtype=str,
                 keep_default_na=False, 
                 engine='python', 
                 sep=',', 
                 quoting=3)
print (df)
     A    B       C  D     E
0  234  mno     C22  U      
1  567  pqr  "C3"""  U  5555
2  999  abc   "C99"  D  9999

print (df.to_csv(sep=',', index=False, header=True, quoting=3))
A,B,C,D,E
234,mno,C22,U,
567,pqr,"C3""",U,5555
999,abc,"C99",D,9999

df.to_csv('output.txt', sep=',', index=False, header=True, quoting=3)

撰写回答