我有以下代碼
import unicodecsv
CSV_PARAMS = dict(delimiter=",", quotechar='"', lineterminator='\n')
unireader = unicodecsv.reader(open('sample.csv', 'rb'), **CSV_PARAMS)
for line in unireader:
print(line)
它列印
['\ufeff"003', 'word one"']
['003,word two']
['003,word three']
CSV 看起來像這樣
"003,word one"
"003,word two"
"003,word three"
我無法弄清楚為什么第一行有\ufeff(我相信這是一個檔案標記)。此外,"在第一行的開頭。
CSV 檔案來自客戶端,因此我無法指示他們如何保存檔案等。希望修復我的代碼以便它可以處理編碼。
注意:我已經嘗試過傳遞encoding='utf8'給CSV_PARAMS它并沒有解決問題
uj5u.com熱心網友回復:
encoding='utf-8-sig'將洗掉在某些檔案中使用 UTF-8 簽名的 UTF-8 編碼 BOM(位元組順序標記):
import unicodecsv
with open('sample.csv','rb') as f:
r = unicodecsv.reader(f, encoding='utf-8-sig')
for line in r:
print(line)
輸出:
['003,word one']
['003,word two']
['003,word three']
unicodecsv但是你為什么要在Python 3中使用第三方呢?內置csv模塊正確處理 Unicode:
import csv
# Note, newline='' is a documented requirement for the csv module
# for reading and writing CSV files.
with open('sample.csv', encoding='utf-8-sig', newline='') as f:
r = csv.reader(f)
for line in r:
print(line)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/484693.html
標籤:Python CSV 统一码 python-3.9
