我正在運行一個Python腳本,它需要從Postgres數據庫的CSV轉儲,然後我想在所有轉義雙引號這些文件。所以我使用sed來做到這一點。
在我的Python代碼:sed命令運行使用os.system()或subprocess.call()離開csv文件沒有分隔符
sed_for_quotes = 'sed -i s/\\"//g /home/ubuntu/PTOR/csvdata1/'+table+'.csv'
subprocess.call(sed_for_quotes, shell=True)
的過程完成,沒有任何錯誤,但是當我加載這些表紅移,我得到錯誤No delimiter found
,並在檢查的CSV,我發現其中一列只有一半例如,如果它是一個時間戳列,那麼只有一半的數據被加載,並且表中沒有數據(而實際的CSV在運行sed
之前有這些數據)。這導致No delimiter found
錯誤。
但是,當我在shell上運行sed -i s/\"//g filename.csv
這些文件時,它工作正常,並且運行sed後的csv包含所有行。我檢查了文件中的數據沒有問題。
這是不是在Python程序中工作的原因是什麼?我也嘗試在Python程序中使用sed -i.bak
,但這沒有什麼區別。
請注意我在Python代碼中使用了一個額外的反斜槓(\),因爲我需要轉義另一個反斜槓。
其他方法試圖:
- 使用
subprocess.Popen
沒有任何緩衝區的大小,並用積極的緩衝區大小,但是這並沒有幫助 - 使用
subprocess.Popen(sed_for_quotes,bufsize=-4096)
(負緩衝區大小)的 的文件中的一個,其工作正在給出錯誤,但後來在另一個文件中遇到了同樣的 問題。
是的,第一個反衝是爲了「第二個是爲了逃避第三個反斜槓。我打印'sed_for_quotes'以確保它與我運行的shell sed命令相同,所以它沒有問題。 – Yankee
有您嘗試使用原始字符串? – Merlin1896
@ Merlin1896,對不起,我不明白。我正在使用原始字符串AFAIK。 – Yankee