Encoding Python 2.7与3.2中的目录解析问题
我试图在Python3的目录中进行一些基本的文件解析。这段代码在Python2.7中工作得非常好,但我无法理解Python3.2中的问题是什么 导入系统、操作系统、reEncoding Python 2.7与3.2中的目录解析问题,encoding,io,python-3.x,Encoding,Io,Python 3.x,我试图在Python3的目录中进行一些基本的文件解析。这段代码在Python2.7中工作得非常好,但我无法理解Python3.2中的问题是什么 导入系统、操作系统、re filelist = os.listdir('/Users/sbrown/Desktop/Test') os.chdir('/Users/sbrown/Desktop/Test') for file in filelist: infile = open(file, mode='r') filestring
filelist = os.listdir('/Users/sbrown/Desktop/Test')
os.chdir('/Users/sbrown/Desktop/Test')
for file in filelist:
infile = open(file, mode='r')
filestring = infile.read()
infile.close()
pattern = re.compile('exit')
filestring = pattern.sub('so long', filestring)
outfile = open(file, mode='w')
outfile.write(filestring)
outfile.close
exit
这是返回的错误:
Traceback (most recent call last):
File "/Users/bunsen/Desktop/parser.py", line 9, in <module>
filestring = infile.read()
File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 3131: ordinal not in range(128)`
回溯(最近一次呼叫最后一次):
文件“/Users/bunsen/Desktop/parser.py”,第9行,在
filestring=infle.read()
文件“/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/encodings/ascii.py”,第26行,解码
返回编解码器。ascii_解码(输入,自身错误)[0]
UnicodeDecodeError:“ascii”编解码器无法解码位置3131处的字节0x80:序号不在范围内(128)`
我正在解析的文件都是文本文件。我尝试在utf-8的方法参数中指定编码,但没有成功。有什么想法吗?提前谢谢
如果我将编码指定为utf-8,则抛出的错误如下:
Traceback (most recent call last):
File "/Users/sbrown/Desktop/parser.py", line 9, in <module>
filestring = infile.read()
File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 3131: ordinal not in range(128)`
回溯(最近一次呼叫最后一次):
文件“/Users/sbrown/Desktop/parser.py”,第9行,在
filestring=infle.read()
文件“/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/encodings/ascii.py”,第26行,解码
返回编解码器。ascii_解码(输入,自身错误)[0]
UnicodeDecodeError:“ascii”编解码器无法解码位置3131处的字节0x80:序号不在范围内(128)`
测试
filelist = os.listdir('/Users/sbrown/Desktop/Test')
infile = open(filelist[0], mode='r')
print(infile.encoding)
确保您在utf-8
中读取文件。如果没有,请检查您是否使用编解码器做过不好的事情。您还可以使用强制utf-8
?测试发布测试跟踪吗
确保您在utf-8
中读取文件。如果没有,请检查您是否使用编解码器做过不好的事情。您还可以使用强制utf-8
发布测试跟踪吗?这是否有效
import codecs
infile = codecs.open(filelist[0], encoding='UTF-8')
infile.read()
这行吗
import codecs
infile = codecs.open(filelist[0], encoding='UTF-8')
infile.read()
打开文件时未指定编码。在Python3中需要这样做,就像在Python3中一样,文本模式文件将返回解码的Unicode字符串
现在您尝试使用UTF-8,但没有成功,所以很明显,这不是使用的编码。只有您知道它是什么编码,但我猜它是cp1252,因为0x80是代码页的字符,表示€,所以当您有欧洲Windows用户时,在0x80上失败是很常见的。:-)
为了与Python 2.7和3.1兼容,我建议您使用io库打开文件。默认情况下,这是Python 3中使用的,在Python 2.6及更高版本中也可以使用:
import io
infile = io.open(filelist[0], mode='rt', encoding='cp1252')
打开文件时未指定编码。在Python3中需要这样做,就像在Python3中一样,文本模式文件将返回解码的Unicode字符串
现在您尝试使用UTF-8,但没有成功,所以很明显,这不是使用的编码。只有您知道它是什么编码,但我猜它是cp1252,因为0x80是代码页的字符,表示€,所以当您有欧洲Windows用户时,在0x80上失败是很常见的。:-)
为了与Python 2.7和3.1兼容,我建议您使用io库打开文件。默认情况下,这是Python 3中使用的,在Python 2.6及更高版本中也可以使用:
import io
infile = io.open(filelist[0], mode='rt', encoding='cp1252')
谢谢你的帮助。默认编码是US-ASCII。我还添加了在我的问题中强制使用utf-8编码时的错误信息。诅咒你,巨蟒3!哇,同样的痕迹,多奇怪啊!打印(infle.encoding)返回哪个编码?感谢Evpok的帮助。默认编码是US-ASCII。我还添加了在我的问题中强制使用utf-8编码时的错误信息。诅咒你,巨蟒3!哇,同样的痕迹,多奇怪啊!打印(infle.encoding)返回哪个编码?