![](/img/trans.png)
[英]Pandas read_csv - How to handle a comma inside double quotes that are themselves inside double quotes
[英]How to handle double quotes inside field values with csv module?
我正在嘗試從無法控制的外部系統解析CSV文件。
CSV示例:
qw“” erty,“ a”“ b”“ c”“ d,ef”“”“ g”
應該解析為:
[['qw"erty', 'a"b"c"d,ef""g']]
但是,我認為Python的csv模塊不希望將單元格放在第一位時不將引號字符轉義。 csv.reader(my_file)
(默認為doublequote=True
)返回:
['qw""erty', 'a"b"c"d,ef""g']
有什么辦法可以使用python csv模塊來解析它嗎?
在@JackManey注釋之后,他建議將雙引號內的所有'""'
實例替換為'\\\\"'
。
識別我們當前是否在雙引號內是不必要的,我們可以用'\\\\"'
替換所有'""'
實例Python文檔說 :
閱讀時,escapechar刪除了以下字符中的任何特殊含義
但是,在原始單元格已經包含轉義字符的情況下,這仍然會中斷,例如: 'qw\\\\\\\\""erty'
產生[['qw\\\\"erty']]
。因此,我們必須在轉義之前轉義轉義字符也解析。
最終解決方案:
with open(file_path, 'rb') as f:
content = f.read().replace('\\', '\\\\').replace('""', '\\"')
reader = csv.reader(StringIO(content), doublequote=False, escapechar='\\')
return [row for row in reader]
就像@JackManey建議的那樣,在讀取文件后,您可以將單引號替換為雙引號。
my_file_onequote = [col.replace('""', '"') for col in row for row in my_file]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.