我正在使用pandas生成一个csv字符串:
df.to_csv(sep=',', encoding='utf-8', index=False, header=False)
。
我将在postgres中加载csv,如下所示。
COPY table_name FROM STDIN (FORMAT CSV,
DELIMITER ',',
HEADER FALSE,
NULL '',
ENCODING 'utf-8');
当csv中存在回车符时,这种情况偶尔会失败,我使用csv_str.replace('\r', '')
删除了回车符。但是我不确定这种方法是否可能会改变csv中的某些现有数据。
是否有更可靠的方法来删除任何回车?我没有丢失有关回车的信息,但我希望尽可能多地保存存储在csv文件中的任何其他数据。
答案 0 :(得分:2)
不要从CSV文件中删除回车符,而是确保引用包含它们的那些字段。一种方法是引用所有字段:
import csv
import pandas as pd
df.to_csv(sep=',', encoding='utf-8', index=False, header=False, quoting=csv.QUOTE_ALL)
或者,您可以使用quoting=csv.QUOTE_NONNUMERIC
仅引用可能包含\r
的字段。
另一种方法是将行终止符设置为\r\n
(或仅\r
),这将间接导致包含\r
的任何字段被引用。这可能是首选,因为只引用那些需要它的单个“单元格”:
df.to_csv(sep=',', encoding='utf-8', index=False, header=False, line_terminator='\r\n')