【问题标题】:Does python 3.1.3 support unicode in csv module?python 3.1.3 是否支持 csv 模块中的 unicode?
【发布时间】:2012-03-18 16:15:32
【问题描述】:

我一直在使用 python 2.6。当我正在编写一个 python 程序来处理来自 sql server 的查询结果(以 csv 格式)时。我发现它不支持unicode。

当我使用 csv 文件运行程序时,弹出错误提示:

    for row in csvReader:
Error: line contains NULL byte

我用 Ultraedit 将 csv 文件保存为 ANSI/ASCII 格式后,程序运行正常。

我尝试包含编码选项,但失败了:

csvReader = csv.reader(open(fname, mode='rb', encoding='unicode'), delimiter=',')
TypeError: 'encoding' is an invalid keyword argument for this function

csvReader = csv.reader(open(fname, mode='rb', encoding='utf-8'), delimiter=',')
TypeError: 'encoding' is an invalid keyword argument for this function

我想知道 python 3 是否支持这种 unicode 读取。它可以为我节省很多工作。

【问题讨论】:

  • 为什么不直接从python访问SQL呢?
  • Python 3.1.3 的 open 肯定 支持和 encoding= 参数,所以要么你使用不同版本的 Python,要么你不小心覆盖了 @987654325 @函数。
  • 我说我用的是python 2.6。那么Python 3.1.3就不会有这个问题了?
  • Python 3 仍然有这个问题。显然有一个 NUL 字节搞砸了 python,无论是 python 3 还是 python 2。
  • 哦,抱歉,不清楚您使用的是 Python 2.6。请参阅我的更新答案。

标签: python csv


【解决方案1】:

Python 3 绝对支持 unicode。我的猜测是您在打开 CSV 文件进行读取时指定了错误的(或没有?)编码。见:http://docs.python.org/release/3.1.3/library/functions.html#open

并尝试类似:

reader = csv.reader(open("foo.csv", encoding="utf-8"))

编辑:如果您使用的是 Python 2.6,则可以通过以下方式获得相同的结果:

import codecs
reader = csv.reader(codecs.open("foo.csv", encoding="utf-8"))

但是如果你得到空字节,你的文件可能使用"utf-16"编码,所以如果文件不能使用utf-8解码,请尝试。

【讨论】:

  • 我尝试指定编码,但它返回错误。请检查我的编辑。
【解决方案2】:

类似的问题已经回答Python CSV error: line contains NULL byte

另外,请尝试以“rb”模式而不是“rU”模式打开它

【讨论】:

    猜你喜欢
    • 2017-04-10
    • 2013-05-29
    • 1970-01-01
    • 2011-11-10
    • 2011-11-29
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多