2017-04-05 357 views
1

我有一系列格式錯誤的csv,並且在使用python標準庫中的csv解析器解析它們時遇到了一些麻煩。從本質上講,csv不是逃避返回字符,我得到一些我不明白的輸出。python csv無法解析帶引號中的轉義字符的csv

看起來,解析器有時可以把適當的線條放在一起,但是會不規則地放下或添加。例如,在ID = 1的條目中,字符串中間的引號被刪除,但最後一個保留。類似的事情發生在最後一項(id = 3)。我希望外部報價可以像ID一樣放在條目中。

它也沒有以我能找到的可預測的方式組合線條。 id = 2的條目分成兩個條目,我無法理解爲什麼其他兩個條目完好無損,但是這個條目是分割的。

是否有一些模糊的csv的格式,我不理解,使得他們難以解析非轉義的返回字符。我嘗試了各種格式參數無濟於事。任何清晰度將不勝感激。謝謝!

編輯:爲了澄清,我明白我可以在解析csv之前進行字符串替換。我在問爲什麼產量似乎並不正規。

代碼:

import csv 

with open('text.csv') as csv_file: 
    for line in csv.reader(csv_file): 
     print(line) 

輸入:

"id","text" 
"1","This line here 
More Text "quoted" 
"2","This line here "quoted" More Text 
More Text "quoted" More Text" 
"3","This line here 
"quoted" 

輸出:

['id', 'text', 'id2'] 
['97910', 'This line here\r\nMore Text quoted"', '1'] 
['97930', 'This line here quoted" More Text'] 
['More Text "quoted" More Text"', '2'] 
['97930', 'This line here\r\nquoted"', '3'] 

希望的輸出:

['id', 'text', 'id2'] 
['97910', 'This line here\r\nMore Text "quoted', '1'] 
['97930', 'This line here "quoted" More Text\r\nMore Text "quoted" More Text', '2'] 
['97930', 'This line here\r\n"quoted', '3'] 

回答

0

每個嵌入的雙引號字符必須用一對 雙引號字符表示。

1997,Ford,E350,"Super, ""luxurious"" truck" 

領域具有嵌入式換行符必須用引號(然而,許多CSV 實現不支持嵌入式換行符)。

1997,Ford,E350,"Go get one now 
they are going fast" 

所以,你可以用2個引號代替雙引號,解析csv文件或嘗試轉義雙引號時寫的csv文件之前。


該文件的每一行都是數據記錄。每條記錄包含一個或多個以逗號分隔的字段。但是,如果你使用雙引號,它會找到相應的雙引號,如果解析器找不到它,它將讀取下一行,直到得到雙引號,然後,它找不到逗號,這就是爲什麼它治療

"This line here 
More Text "quoted" 

因爲只有一個申請,爲"2","This line here "quoted" More Text,由於同樣的原因,解析器可以找到一對雙引號的,所以它會讀取下一個記錄。

Comma-separated values查看更多詳情。

+0

對,我明白我更嚴格的csv會是什麼樣子。我更多問爲什麼一個人被分解成碎片而其他人不是。 –

+0

@QuintonRobbins我更新了我的答案。 – McGrady

+0

您是否暗示我認爲正確的行只是偶爾被解析器拾取,因爲引號的具體組合並且實際上它們中沒有一個正在以「正確」方式解析? –