可以将非ASCII字符用作Python 2的csv模块的分隔符吗?

时间:2013-06-26 16:44:37

标签: csv python-2.7 utf-8

我有一些在Python 3中有效的代码,但是我需要将它降级为Python 2.我有一个类写一个csv来显示已经生成了ASCII的随机字符串。这是有效的Python 3代码。

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:“delimiter”必须是1个字符的字符串。

2 个答案:

答案 0 :(得分:2)

据我所知,你不能在分隔符中使用多字节字符,也不能在python 2.x中使用quotechar:

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

错误消息确实说“1-character”而不是“1-byte”,但我无法让它工作。

答案 1 :(得分:-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ę æ