Python open()函数不在Spyder中工作,但在具有相同解释器的终端中工作
您好,我在尝试在Spyder中运行一个非常简单的程序时遇到一些问题:Python open()函数不在Spyder中工作,但在具有相同解释器的终端中工作,python,file,spyder,Python,File,Spyder,您好,我在尝试在Spyder中运行一个非常简单的程序时遇到一些问题: #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat May 13 18:51:59 2017 @author: admin """ f = open('shark-species.txt') for line in f: print(line) txt文件只包含拉丁字母表中的字母。在spyder IPython或Python控制台中
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat May 13 18:51:59 2017
@author: admin
"""
f = open('shark-species.txt')
for line in f:
print(line)
txt文件只包含拉丁字母表中的字母。在spyder IPython或Python控制台中运行时遇到的错误是:
Traceback (most recent call last):
File "<ipython-input-5-eccaeae0c773>", line 1, in <module>
runfile('/Users/admin/pybin/LCPWP/Chapter4/sharkspecies.py',
wdir='/Users/admin/pybin/LCPWP/Chapter4')
File "/Users/admin/anaconda/lib/python3.5/site-
packages/spyder/utils/site/sitecustomize.py", line 880, in runfile
execfile(filename, namespace)
File "/Users/admin/anaconda/lib/python3.5/site-
packages/spyder/utils/site/sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "/Users/admin/pybin/LCPWP/Chapter4/sharkspecies.py", line 11, in
<module>
for line in f:
File "/Users/admin/anaconda/lib/python3.5/encodings/ascii.py", line 26,
in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
7869: ordinal not in range(128)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
运行文件('/Users/admin/pybin/LCPWP/Chapter4/sharkspecies.py',
wdir='/Users/admin/pybin/LCPWP/Chapter4')
文件“/Users/admin/anaconda/lib/python3.5/site-
运行文件中的packages/spyder/utils/site/sitecustomize.py”,第880行
execfile(文件名、命名空间)
文件“/Users/admin/anaconda/lib/python3.5/site-
packages/spyder/utils/site/sitecustomize.py”,第102行,在execfile中
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“/Users/admin/pybin/LCPWP/Chapter4/sharkspecies.py”,第11行,在
对于f中的行:
文件“/Users/admin/anaconda/lib/python3.5/encodings/ascii.py”,第26行,
解码中
返回编解码器。ascii_解码(输入,自身错误)[0]
UnicodeDecodeError:“ascii”编解码器无法解码位置中的字节0xc3
7869:序号不在范围内(128)
现在奇怪的是,程序在终端上运行得很好,Spyder和终端都使用同一个解释器,所以我很难理解Spyder为什么要这么做。在Spyder屏幕的bootom中,它还明确表示编码为UTF-8。文件确实包含Unicode字符,打开文件的首选方法是使用模块,如下所示:
import codecs
with codecs.open('file', 'r', 'utf-8') as fp:
lines = fp.readlines()
文件不包含Unicode字符,打开文件的首选方法是使用以下模块:
import codecs
with codecs.open('file', 'r', 'utf-8') as fp:
lines = fp.readlines()
或者Python 2/3兼容方式:
io.open(…)
。我想你指的是codecs.open,是的,这很有效,谢谢,但是你知道为什么standar open函数在我的终端中有效,而在spyder中无效吗?如果你使用的是Python 3,不需要编解码器,因为内置的open
具有相同的功能。您好,我使用的是Python 3,而内置的open函数没有在中打开文件spyder@Someguy:它在您的终端上工作,因为它支持utf-8。请参阅:sys.getfilesystemencoding()或Python 2/3兼容方式:io.open(…)
。我想你指的是codecs.open,是的,谢谢。但是你知道为什么standar open函数在我的终端中有效,而在spyder中无效吗?如果你使用的是Python 3,不需要编解码器,因为内置的open
具有相同的功能。您好,我使用的是Python 3,而内置的open函数没有在中打开文件spyder@Someguy:它在您的终端上工作,因为它支持utf-8。请参阅:sys.getfilesystemencoding(),其中的编码是针对脚本的。是的,我知道,但是.txt文件也是utf-8编码的,我使用的是AnacondaSo提供的Python 3.5.2解释器?重要的是默认情况下打开文件时使用的是什么编码,而不是脚本的编码。这种编码是针对脚本的。是的,我知道,但是.txt文件也是utf-8编码的,我使用的是AnacondaSo提供的Python 3.5.2解释器?重要的是默认情况下打开文件时使用的编码,而不是脚本的编码。