2017-10-08 76 views
1

我使用熊猫生成一个csv字符串: df.to_csv(sep=',', encoding='utf-8', index=False, header=False)从Csv字符串中移除回车返回

我将在postgres中加载csv,如下所示。

COPY table_name FROM STDIN (FORMAT CSV, 
    DELIMITER ',', 
    HEADER FALSE, 
    NULL '', 
    ENCODING 'utf-8'); 

偶尔当有马车存在于CSV,我删除使用csv_str.replace('\r', '')回报,这将失败。但是我不确定这种方法是否可能会改变csv中的某些现有数据。

是否有更可靠的方法来删除任何回车?我很担心丢失有关回车的信息,但我想尽可能地保留存储在csv文件中的任何其他数据。

回答

1

而不是从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') 
+0

我已经尝试了所有三种方法,并且只使用'line_terminator'似乎工作的一个,其余导致所有空是引用和空字符串无法区分。不过,如果可能的话,我宁愿使用引用方法。有没有解决方法? – user113531

+0

您可以尝试将NULL表示更改为另一个字符串,例如在'COPY'命令中使用'na_rep ='\ N'',然后'NULL'\ N'',但不幸的是,熊猫引用了'\ N',然后'COPY'不能识别该值为NULL。所以我认为答案是否定的,你将不得不设置'line_terminator'。 – mhawke