1

我有一些在 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" must be a 1-character string 不过。

4

2 回答 2

2

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

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

错误消息确实说“1 个字符”而不是“1 个字节”,但我无法让它工作。

于 2013-06-26T17:59:25.450 回答
-2

通过对您的代码进行一些修复,快速测试表明它工作正常。

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ę æ
于 2013-06-26T17:03:50.563 回答