Encoding Python 2.7与3.2中的目录解析问题

Encoding 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

我试图在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 = 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)返回哪个编码?