gpt4 book ai didi

python - 使用 UnicodeWriter 时可怕的 "ordinal not in range"——否则文件会干净地写入/读取

转载 作者:太空宇宙 更新时间:2023-11-03 18:02:39 25 4
gpt4 key购买 nike

我正在尝试使用 UnicodeWriter example在 Python 2.7 的 csv writer 库文档的底部给出,但我得到了臭名昭著的信息: UnicodeEncodeError: 'ascii' codec can't Encode character u'\xb7' inposition 53: ordinal not in range( 128) 当我将数据传递给包含变音符号的 UnicodeWriter 的 writerow() 时,就会出现错误。

我能够将数据写入文件而不会出现错误,如下所示:

ff = codecs.open(conf.settings.CSV_OUTPUT_DIR + '/' + filename, mode='w', encoding='utf-8')
ff.write(r)

其中 r 是 Oracle 数据库结果中游标中行的索引。当我查看生成的文件时,变音符号和其他非 ASCII 字符显示得很好。但是,当我像这样切换到使用 UnicodeWriter 时:

ff = codecs.open(conf.settings.CSV_OUTPUT_DIR + '/' + filename, mode='w', encoding='utf-8')
writer = UnicodeWriter(ff)
writer.writerow(row)

(其中 row 只是我从该特定行的游标中检索的所有字符串*的串联列表)它失败并显示我上面复制的错误消息。为什么我可以使用 write() 将数据写入磁盘(并可以正常读取),但不能使用 UnicodeWriter?我做错了什么?

*我犹豫在这里使用字符串这个词,因为我认为它在 Python 2.7 中有特定的含义(我不太理解)。我的意思是一般意义上的。

附注如果重要的话,我的 NLS_LANG 环境变量设置为 .US7ASCII。另外,请原谅我的无知——我是在 Python 中使用 Unicode 和字符编码/解码的新手。

最佳答案

在第二个示例中,请注意 UnicodeWriter 处理编码。换句话说,您不需要使用编解码器打开文件,事实上这就是导致异常的原因。

您可以正常打开该文件。 UnicodeWriter 类默认编码是 UTF-8。所以你的代码应该看起来更像:

import os # for os.path.join(): a cross-platform solution to combining path elements
with open(os.path.join(conf.settings.CSV_OUTPUT_DIR, filename), 'wb') as fou:
writer = UnicodeWriter(fou)
writer.writerow(row)

关于python - 使用 UnicodeWriter 时可怕的 "ordinal not in range"——否则文件会干净地写入/读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27448504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com