1

我有以下代码使用 RE 搜索文件,如果找到任何匹配项,它会将文件移动到不同的目录中。

import os
import gzip
import re
import shutil

def regEx1():
    os.chdir("C:/Users/David/myfiles")
    files = os.listdir(".")
    os.mkdir("C:/Users/David/NewFiles")
    regex_txt = input("Please enter the string your are looking for:")
    for x in (files):
        inputFile = open((x), "r")
        content = inputFile.read()
        inputFile.close()
        regex = re.compile(regex_txt, re.IGNORECASE)
        if re.search(regex, content)is not None:
            shutil.copy(x, "C:/Users/David/NewFiles")

当我运行它时,我收到以下错误消息:

Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "C:\Python33\Lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 367: character maps to <undefined>

请有人解释为什么会出现此消息

4

4 回答 4

9

在 python 3 中,当您以文本模式 ( ) 打开文件进行读取时,r它会将包含的文本解码为 un​​icode。

由于您没有指定用于读取文件的编码,locale.getpreferredencoding因此正在使用平台默认值 (from ),在这种情况下会失败。

您需要指定可以解码文件内容的编码,或者改为以二进制模式打开文件(并b''为正则表达式使用字节模式)。

有关更多信息,请参阅Python Unicode HOWTO

于 2013-01-09T17:06:38.137 回答
1

我对 python 3x 不太熟悉,但下面可能会起作用。

inputFile = open((x, encoding="utf8"), "r")
于 2013-01-09T18:45:49.163 回答
1

这里有一个类似的问题: Python: Traceback codecs.charmap_decode(input,self.errors,decoding_table)[0]

但您可能想尝试:

 open((x), "r", encoding='UTF8')
于 2015-09-09T03:01:12.320 回答
0

非常感谢您提供此解决方案。它对我的另一个主题有帮助,我用过:

exec (open ("DIP6.py").read ())

我收到了这个错误,因为我在 DIP6.py 的评论中有这个符号:

 #       ● en première colonne

它适用于:

exec (open ("DIP6.py", encoding="utf8").read ())

它还解决了以下问题:

print("été") for example

在 DIP6.py

我有 :

été

在控制台中。

谢谢 :-) 。

于 2017-09-15T09:58:27.957 回答