2017-03-02 86 views
1

我是python的新手。我從SQL Server讀取數據,然後將數據寫入一個csv文件。表格行具有數字,字符串和日期時間值。我嘗試了不同的方式來編寫數據。例如,UnicodeEncodeError:'charmap'編解碼器無法在位置68編碼字符' u5347':字符映射到<undefined>

#method 1 
import pandas as pd 

df = pd.DataFrame(table, columns=["colummn"]) 

df.to_csv('list.csv', index=False)* 

#method 2 
import csv 

fl = open('OnlineplayDatabase.csv', 'w') 

writer = csv.writer(fl) 

for row in table: 

    writer.writerow(row) 

fl.close()  

這兩種方法都正常工作。但是當一些行包含中文字符時(見下面的例子),我收到了編碼錯誤。錯誤消息說:

codecs.charmap_encode(input,self.errors,encoding_table)[0] 

#Error Code 
UnicodeEncodeError: 'charmap' codec can't encode character '\u5347' in position 68: character maps to <undefined> 

我試圖使用utf-8編碼行中的字段。但有些字段是數字。

非常感謝您的幫助!

('120.239.9.116 ', 
'gyandroid ', 
4, 
9, 
'Dalvik/1.6.0(Linux;U;Android4.4.2;升級版Build/KVT49L)                  datetime.datetime(2016, 6, 11, 20, 54, 19), 
datetime.datetime(2016, 6, 11, 20, 56, 53), 
11521.0) 

回答

0

再次看看錯誤。發生這種情況是因爲數據框中的某處有以\u開頭的單詞。你需要擺脫這一點。看看這是否有效。使用下面的remove_u函數來擺脫\u

def remove_u(word): 
    word_u = (word.encode('unicode-escape')).decode("utf-8", "strict") 
    if r'\u' in word_u: 
     # print(True) 
     return word_u.split('\\u')[1] 
    return word 

df.loc[:, 'colummn'] = df['colummn'].apply(func = remove_u) 

一旦你更新了數據幀,嘗試再次寫出它。

編輯

我假設你的專欄是由單個單詞。如果列中有字符串,請使用remove_u的修改版本

def remove_u(input_string): 
    words = input_string.split() 
    words_u = [(word.encode('unicode-escape')).decode("utf-8", "strict") for word in words] 
    words_u = [word_u.split('\\u')[1] if r'\u' in word_u else word_u for word_u in words_u] 
    # print(words_u) 
    return ' '.join(words_u) 
相關問題