[英]Why does csv.reader fail when the file size is larger than 40K bytes?
我有以下代碼:
with open(filename, 'rt') as csvfile:
csvDictReader = csv.DictReader(csvfile, delimiter=',', quotechar='"')
for row in csvDictReader:
print(row)
只要文件大小小於40k字節,該程序就可以正常工作。 當文件大小超過40k時,在嘗試讀取文件時出現此錯誤:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 7206: invalid start byte
實際的文件內容似乎不是問題,僅是文件本身的大小(40k字節確實很小)。
當文件大小大於40K字節時,總是在包含第32K個字節的行上發生錯誤。
我有一種感覺,python毫無例外地無法讀取超過40K字節的文件,而只是在中間將第32K字節附近截斷了文件。 那是對的嗎? 該限制在哪里定義?
您的文件中包含無效的UTF-8數據。 這與csv
模塊無關,也與文件大小無關。 您的較大文件中包含無效數據,而較小文件中沒有。 簡單地做:
with open(filename) as f:
f.read()
應該會觸發相同的錯誤,這純粹是遇到無效的UTF-8字節的問題,這表明您的文件不是以UTF-8開頭的,或者已經以某種方式損壞了。
如果您的文件實際上是不同的編碼(例如latin-1
, cp1252
等; file
命令行實用程序可能有助於識別,但是對於許多ASCII超集編碼,您只需要知道 ),請將其作為encoding
參數傳遞給open
使用而不是默認的語言環境(在這種情況下為utf-8
),因此您可以正確解碼字節,例如:
# Also add newline='' to defer newline processing to csv module, where it's part
# of the CSV dialect
with open(filename, encoding='latin-1', newline='') as csvfile:
csvDictReader = csv.DictReader(csvfile, delimiter=',', quotechar='"')
for row in csvDictReader:
print(row)
文件大小不是真正的問題,請參見異常:
UnicodeDecodeError:'utf-8'編解碼器無法解碼位置7206中的字節0xa0:無效的起始字節
您應該首先處理編碼問題
with open(filename, 'rt', encoding='utf-8', errors='ignore') as csvfile:
它將忽略編碼錯誤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.