Python:Parse thorn分隔文件 - 代码适用于Windows,但不适用于Linux?

时间:2015-04-16 01:40:58

标签: python linux utf-8 amazon-ec2 character-encoding

以下代码在Windows 7中正常工作:

[30]  delim = b'\xc3\xbe'.decode() # 'þ'
[31]  reader = csv.reader(my_file, delimiter=delim)

然而,在我的ec2实例上使用python 3.4在Amazon Linux上失败,抛出错误:

  

SyntaxError:文件中以'\ xfe'开头的非UTF-8代码   第30行的data_loader.py,但没有声明编码;看到   http://python.org/dev/peps/pep-0263/了解详情

我是从linux shell运行的,即:

python3 data_loader.py

然而,当我在ec2 linux服务器上使用Python 3.4命令行时,我得到了预期的结果:

>>> b'\xc3\xbe'.decode()
'þ'

我尝试将delim设置为很多东西,包括:

delim = '\xfe'

但我得到同样的错误。

任何人都可以帮我弄清楚发生了什么事吗?就像我说的,代码在Python 3.4,Windows 7上运行良好。

谢谢!

1 个答案:

答案 0 :(得分:2)

错误是由第30行的注释中包含非ascii字符引起的。

根据python本身链接到的PEP article

  

本PEP建议引入一种语法来声明编码       一个Python源文件。然后,编码信息被使用       Python解析器使用给定的编码来解释文件。最       值得注意的是,这增强了对Unicode文字的解释       源代码,可以编写Unicode文字       使用例如UTF-8直接在Unicode识别编辑器中。

...

  

如果没有其他的话,Python将默认为ASCII标准编码       给出了编码提示。

要修复错误,您可以从第30行删除注释,也可以指定python解释器用于正确读取注释的文件编码。

例如,如果在创建源文件时使用latin-1编码来添加'þ'字符,则将此行添加到python脚本的顶部:

# coding=latin-1

用文件的实际编码替换编码,你应该好好去。