2009-12-02 70 views
0

我從source.sql讀(sql腳本)文件python編碼問題?

INSERT INTO `Tbl_abc` VALUES (1111, 2222, 'CLEMENT', 'taya', 'MME', 'Gérant', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 4688, 0, NULL, NULL, 'MAILLOT 01/02/09', 'MAILLOT 01/04/09', NULL, NULL); 

和寫入dest.sql隨着我的列表格式化

我與編碼遇到的問題,例如:

Gérant= G\xc3\xa9rant 

我在想什麼

def DataMigration(dest, source, tbl_name, return_data=True): 
    '''  
    ''' 
    data = [] 
    for ln in codecs.open(source, 'r', "utf-8").xreadlines(): 
     replace1 = ln.replace("INSERT INTO `"+tbl_name+"` VALUES (", "") 
     replace2 = replace1.replace(");", "") 
     list_replace = replace2.split(',')   
     s = list_replace 
     data.append(list_replace) 

    if return_data == True: 
     ouputdata = [d for d in data if d[1] == ' 0' and d[6]==' 0'] 
     return ouputdata 
    if return_data == False: 
     return data 

我打印 打印DataMigration( 'dest.sql', '.source.sql', 'Tbl_abc',FALSE)

輸出

[['1111', ' 2222', " 'CLEMENT'", " 'taya'", " 'MME'", " 'G\xc3\xa9rant'", ' NULL', ' NULL', ' NULL', ' NULL', ' NULL', ' NULL', ' NULL', ' 4688', ' 0', ' NULL', ' NULL', " 'MAILLOT 01/04/09'", " 'MAILLOT 01/04/09'", ' NULL', ' NULL']] 


But My Ouput file still has the problem.Any Could help me ? 
+0

只是一個想法:你檢查你的表定義嗎? – jensgram 2009-12-02 08:16:47

+0

我更新了我的queston.Thanks徵求意見。 – kn3l 2009-12-02 08:40:19

+0

是的,因爲我用法語 – kn3l 2009-12-02 08:47:49

回答

1

請使用.encode("utf-8"),當你寫.sql文件了。

打開文件

fileObj = codecs.open("someFile", "r", "utf-8") 

可以說你讀它

data=fileOjb.read() 

...做一些數據

open("newfile","w").write(data.encode("utf-8")) 
+0

我更新了我的問題。謝謝。 – kn3l 2009-12-02 08:41:08

+0

我可以假設,你想'Gérant'而不是'G \ xc3 \ xa9rant'在.sql文件中? – YOU 2009-12-02 08:56:35

+0

yes.it會是這樣的。 – kn3l 2009-12-02 09:03:22

0
文件.SQL的

喜校驗編碼也許它不是utf-8!

0

將您的工作數據作爲Unicode在Python內部存儲(在讀取時使用解碼),並始終使用編碼寫出。

在您的實例中,您需要知道數據庫的編碼以瞭解正確的輸出編碼。

+0

是的,因爲我用法語。 – kn3l 2009-12-02 08:46:14