2017-10-08 23 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