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) で読み取るためにファイルを開くと、含まれているテキストが Unicode にデコードされます。

ファイルの読み取りに使用するエンコーディングを指定しなかったため、プラットフォームのデフォルト (からlocale.getpreferredencoding) が使用されており、この場合は失敗します。

ファイルの内容をデコードできるエンコーディングを指定するか、代わりにファイルをバイナリ モードで開く必要があります (そしてb''、正規表現にバイト パターンを使用します)。

詳細については、Python Unicode HOWTOを参照してください。

于 2013-01-09T17:06:38.137 に答える
1

私はpython3xにあまり精通していませんが、以下は機能する可能性があります。

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 に答える