用Python编译csv文件

时间:2016-08-03 23:37:07

标签: python python-3.x csv encoding utf-8

所以我有这个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> 

到目前为止,我尝试过:使用encodingutf-8等更改open函数中的UTF8值,从而生成打印函数:

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

但是当你必须打印字典列表时,这不是一种可行的方法。

有人告诉我,问题是我的python没有设置为将这些消息编码为utf-8,是真的,我该如何更改?

1 个答案:

答案 0 :(得分:0)

这里的问题是当python写入流时,它会尝试以与该流的编码或字符集兼容的方式编写文本。

在这种情况下,您似乎在Windows控制台中运行该命令,该控制台设置为显示西里尔文本(CP866)。西里尔语代码页不包含ü的相应字符,因此无法将字符串解码为适当的字符以进行输出。

将Windows cmd控制台的活动代码页更改为utf-8应该会有所帮助:

$ CHCP 65001