0

Robocopy-Log (>25 MB) を反復処理するプログラムを作成しています。問題が発生したため、まだ準備ができていません。

問題は、ログの ~1700 行を繰り返した後、"UnicodeError" が発生することです。

Traceback (most recent call last):
  File "C:/Users/xxxxxx.xxxxxx/SkyDrive/#Python/del_robo2.py", line 6, in <module>
    for line in data:
  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 0x81 in position 7869: character maps to <undefined>

プログラムは次のようになります。

x="Error"
y=1
arry = []
data = open("Ausstellungen.txt",mode="r")
for line in data:
    arry = line.split("\t")
    print(y)
    y=y+1
    if x in arry:
        print("found")
        print(line)
data.close()   

txt ファイルを 1000 行に減らすと、プログラムは機能します。1500 行から 3000 行を削除して再度実行すると、1700 行付近で再び Unicode エラーが発生します。

それで、私はエラーを起こしましたか、それともこれはPythonのメモリ制限の問題ですか?

4

2 に答える 2

1

データとスニペットを考えると、これがメモリの問題である場合は驚くでしょう。エンコーディングの可能性が高い: Python はシステムのデフォルト エンコーディングを使用してファイルを読み取りますが、これは "cp1252" (デフォルトの MS Windows エンコーディング) ですが、ファイルにはそのエンコーディングではデコードできないバイト シーケンス/バイトが含まれています。ファイルの実際のエンコーディングの候補は「latin-1」かもしれません。これは、Python 3 で次のように使用できます。

open("Ausstellungen.txt",mode="r", encoding="latin-1")

おそらく同様の問題は、CP-1252/ANSI 読み取りでの Python 3 チョークです。全体についての素晴らしい話はここにあります:http://nedbatchelder.com/text/unipain.html

于 2013-06-26T11:48:37.857 に答える
0

Python は、すべてのファイル データを Unicode 値にデコードします。使用するエンコーディングを指定しなかったため、Python はシステムのデフォルトであるcp1252Windows Latin codepageを使用します。

ただし、これはファイル データのエンコーディングが正しくありません。使用する明示的なコーデックを指定する必要があります。

data = open("Ausstellungen.txt",mode="r", encoding='UTF8')

正確にどのエンコーディングを使用するかは、残念ながら自分で把握する必要があります。コーデックの例として UTF-8 を使用しました。

RoboCopy の一部のバージョンでは、有効な出力の生成に問題があることに注意してください。

Unicode が何であるかをまだ知らない場合、またはエンコーディングについて知りたい場合は、以下を参照してください。

ファイルのさまざまな部分でエラーが発生するのは、cp1252 エンコーディングでは処理できないコードポイントがデータに複数含まれているためです。

于 2013-06-26T11:49:31.943 に答える