2013-06-26 17 views
1

我有一些代碼可以在Python 3中工作,但我需要將它降級到Python 2.我有一個類寫入了一個csv,它顯示了隨機生成的ASCII字符串。這是可用的Python 3代碼。可以使用非ASCII字符作爲Python 2的csv模塊的分隔符嗎?

file = open(output_table, 'w') 
header = 'Path Type Original Attempt Attempt_Length Final Time_1 Time_2 Time_3'.split() 
filewriter = csv.writer(self.file, quoting=csv.QUOTE_ALL, delimiter='ę', quotechar='æ') 

問題是,如果我使用ascii字符,我有機會列的下車,我的腳本炸燬。如何分隔Unicode/UTF-8字符的列?

編輯: 所以我找到了一些方法使Python 2更好地與utf-8一起工作。包括

# -*- coding: utf-8 -*- 
    from __future__ import print_function, unicode_literals 

位於文件頂部幫助。我仍然得到一個TypeError:儘管「分隔符」必須是1個字符的字符串。

回答

2

據我所知,你不能使用的分隔符多字節字符,也不在Python 2.x中的quotechar :

TypeError: "delimiter" must be an 1-character string 

e rror消息確實會說「1個字符」而不是「1個字節」,但我無法使其工作。

+1

如果可以的話,我會努力讓你滿意 - 我現在認爲它與編碼有關以及Python 2無法處理unicode的事實關鍵字參數。 – wegry

-1

對代碼進行了一些修復,快速測試表明它工作正常。

import csv 

with open('output.csv', 'wt', newline='') as csvfile: 
    header = 'int double str'.split() 
    filewriter = csv.writer(csvfile, quoting=csv.QUOTE_ALL, delimiter='ę', quotechar='æ') 

    for x in range(5): 
     filewriter.writerow((x, x*2, ("fooę "*x))) 


with open('output.csv', 'rt') as csvfile: 
    filereader = csv.reader(csvfile, quoting=csv.QUOTE_ALL, delimiter='ę', quotechar='æ') 

    [print(x) for x in filereader] 

輸出:

['0', '0', ''] 
['1', '2', 'fooę '] 
['2', '4', 'fooę fooę '] 
['3', '6', 'fooę fooę fooę '] 
['4', '8', 'fooę fooę fooę fooę '] 

生成的文件:

æ0æęæ0æęææ 
æ1æęæ2æęæfooę æ 
æ2æęæ4æęæfooę fooę æ 
æ3æęæ6æęæfooę fooę fooę æ 
æ4æęæ8æęæfooę fooę fooę fooę æ 
+1

您的代碼有3個錯誤。你似乎將操作系統的代碼從python 3轉換爲python 3. – 7stud

相關問題