我遇到Python2.7的问题抱怨我没有声明编码;然而,它实际上已经宣布。我在OS X El Capitan(10.11.3)和python 2.7.11上运行它。
我正在尝试搜索特定中文和英文术语的数据集。 report.csv包含我要搜索的数据,raw_terms.txt包含新行分隔的中文和英文术语。两个文件都保存为UTF-8。
我注意到这段代码可以在不同的机器上运行,但不是我的。我假设今年有一些我改变的东西+我有这台笔记本电脑造成了这个问题,但我不确定从哪里开始我的搜索。
脚本:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import csv
count = 0
with open('./data/report.csv', 'rb') as c:
csv_data = csv.DictReader(c, delimiter=',', quoting=csv.QUOTE_ALL)
for data in csv_data:
with open('./terms/raw_terms.txt', 'r') as f:
for term in f:
term = term.strip()
if term in data['Description']: #or term in '你好!你好吗':
# print 'Found \"%s\" in \"%s\"' % (term, data['Subject'])
count += 1
else:
continue
print count
错误:
File "t.py", line 1
SyntaxError: Non-ASCII character '\xfe' in file t.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
感谢任何人可以提供的任何帮助/指示。
答案 0 :(得分:0)
您的例外是由于您的源代码中包含非ASCII字符。在您的情况下,您的文件似乎已保存为带有BOM的UTF-16 BE。
不幸的是,encoding
/ coding
标头必须在任何非ascii之前,这当然是不可能的,因为BOM必须驻留一个字节0.一个捕获22情况。
您唯一的选择是将文件的编码更改为不需要BOM的编码,例如UTF-8。在Sublime中,您可以简单地选择:文件 - >使用编码保存 - > UTF-8。
在命令行中,您重新编码并剥离BOM:
iconv -f UTF-16BE -t UTF-8 test42.py | tail -c +4 > test43.py
另外,请注意@ tripleee关于Python 2.x中CSV模块的评论。相反,请使用https://github.com/jdunck/python-unicodecsv,这是与Unicode兼容的直接替换