【问题标题】:Can a non-ASCII character be used as a delimiter with Python 2's csv module?非 ASCII 字符可以用作 Python 2 的 csv 模块的分隔符吗?
【发布时间】:2013-06-23 22:27:52
【问题描述】:

我有一些可以在 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 个字符的字符串。

【问题讨论】:

    标签: csv python-2.7 utf-8


    【解决方案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ę æ
    

    【讨论】:

    • 您的代码有 3 个错误。您似乎正在将操作代码从 python 3 转换为 python 3。
    【解决方案2】:

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

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

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

    【讨论】:

    猜你喜欢
    • 2011-11-09
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 2016-07-28
    • 2015-04-18
    • 1970-01-01
    相关资源
    最近更新 更多