0

SOメンバーの助けを借りて、次のように到達することができました。以下はサンプルコードです。目的は、特定のフォルダーとそのサブフォルダーからテキストファイルをマージし、出力をmaster.txtとして保存することです。しかし、私は時々トレースバックを取得しています。ファイルの読み取り中にエラーがスローされるようです。

提案、入力、およびいくつかの調査を考慮して、均一なユニコードでテキストファイルをクリーンアップするか、行ごとの関数を使用することをお勧めします。そのため、各行の読み取りでは、ゴミ文字と空行を削除する必要があります。

import shutil
import os.path

root = 'C:\\Dropbox\\test\\'
files = [(path,f) for path,_,file_list in os.walk(root) for f in file_list]

with open('C:\\Dropbox\\Python\\master.txt','wb') as output:
    for path, f_name in files:
        with open(os.path.join(path, f_name), 'rb') as input:
            shutil.copyfileobj(input, output)
        output.write(b'\n') # insert extra newline 

with open('master.txt', 'r') as f:
  lines = f.readlines()
with open('master.txt', 'w') as f:
  f.write("".join(L for L in lines if L.strip()))

私が得るトレースバック:

Traceback (most recent call last):
  File "C:\Dropbox\Python\master1.py", line 14, in <module>
    lines = f.readlines()
  File "C:\PYTHON32\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 8159: character maps to <undefined>
4

1 に答える 1

2

テキスト モードで master.txt を開きました。そこから readlines() すると、システムのデフォルトのエンコーディングでデコードされます。UnicodeDecodeError が発生するため、ファイルが別のデコードにあるようです。

ファイルをバイナリ モードで開くか、正しいエンコーディングを指定してください。

于 2012-08-31T14:21:18.203 に答える