簡體   English   中英

用Python編譯csv文件

[英]Encoding csv files on opening with Python

所以我有這個csv有這樣的行:

"41975","IT","Catania","2016-01-12T10:57:50+01:00",409.58
"538352","DE","Düsseldorf","2015-12-18T20:50:21+01:00",95.03
"V22211","GB","Nottingham","2015-12-31T11:17:59+00:00",872

在當前示例中,第一個和第三個單詞工作正常,但程序在打印Düsseldorf時崩潰, ü有問題

我希望能夠從這個csv文件中獲取信息並能夠print它。 這是我的代碼:

def load_sales(file_name):
    SALES_ID = 0
    SALES_COUNTRY = 1
    SALES_CITY = 2
    SALES_DATE = 3
    SALES_PRICE =4
    with open(file_name,  'r', newline='', encoding='utf8') as r:
        reader = csv.reader(r)
        result=[]
        for row in reader:
            sale={}
            sale["id"]=row[SALES_ID]
            sale["country"]=row[SALES_COUNTRY]
            sale["city"]=row[SALES_CITY]
            sale["date"]=row[SALES_DATE]
            sale["price"]=float(row[SALES_PRICE])
            result.append(sale)

當我打印我打印result我得到:

  File "C:\Anaconda3\lib\encodings\cp866.py", line 19, in encode                                                   
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]                                                
UnicodeEncodeError: 'charmap' codec can't encode character '\xfc' in position 384: character maps to <undefined> 

到目前為止,我已經嘗試過:使用utf-8UTF8等更改open函數中的encoding值,制作打印功能:

def write_uft8(data):
    print(data).encode('utf-8')

但是,當您必須打印字典列表時,這不是一種可行的方法。

有人告訴我,問題是我的python沒有設置為將這些消息編碼為utf-8,這是真的,我該如何更改它?

這里的問題是,當python寫入流時,它會嘗試以與該流的編碼或字符集兼容的方式編寫文本。

在這種情況下,您似乎在Windows控制台中運行該命令,該控制台設置為顯示西里爾文本(CP866)。 西里爾語代碼頁不包含ü的相應字符,因此無法將字符串解碼為適當的字符以進行輸出。

將Windows cmd控制台的活動代碼頁更改為utf-8應該有助於:

$ CHCP 65001

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM