【发布时间】:2011-07-08 00:33:58
【问题描述】:
我正在尝试使用 csv 模块读取一个 utf-8 csv 文件,但由于编码,我在为 python 2 和 3 创建通用代码时遇到了一些麻烦。
这是 Python 2.7 中的原始代码:
with open(filename, 'rb') as csvfile:
csv_reader = csv.reader(csvfile, quotechar='\"')
langs = next(csv_reader)[1:]
for row in csv_reader:
pass
但是当我使用 python 3 运行它时,它不喜欢我在没有“编码”的情况下打开文件的事实。我试过这个:
with codecs.open(filename, 'r', encoding='utf-8') as csvfile:
csv_reader = csv.reader(csvfile, quotechar='\"')
langs = next(csv_reader)[1:]
for row in csv_reader:
pass
现在 python 2 无法解码“for”循环中的行。那么……我该怎么做呢?
【问题讨论】:
-
所以您希望代码在 Python 2.7 和 3 上都保持不变?考虑到字符串处理等发生了很大变化,可能是不可能的。
-
是否可以为 python 2 或 3 指定块代码?
-
您可以检查
sys.version并在您的代码周围包裹if - else语句,是的。 -
@Tim Pietzchker;请求原谅比请求许可更好。
-
我认为你在错误的例子中使用了 b 标志,我把它换了。
标签: python encoding csv python-3.x