前提・実現したいこと
卒業研究でPythonでアプリを作っているPython初心者です。
実現したいこととしまして、対象ディレクトリ(drive)下から拡張子xmlのファイルを全てUTF8に変換して選択したディレクトリに新規保存したいです。
発生している問題・エラーメッセージ
C:\Users\sera\PycharmProjects\PatentApp C:\Users\sera\PycharmProjects\save operation_start C:\Users\sera\PycharmProjects\PatentApp\translate\2013523997.xml C:\Users\sera\PycharmProjects\save\2013523997.xml Traceback (most recent call last): File "C:\Users\sera\PycharmProjects\PatentApp\patentApp\copyXMLfiles.py", line 37, in <module> for row in ff: # 元ファイルから1行ずつ読みだして File "C:\Program Files\Python37\lib\codecs.py", line 712, in __next__ return next(self.reader) File "C:\Program Files\Python37\lib\codecs.py", line 643, in __next__ line = self.readline() UnicodeDecodeError: 'euc_jp' codec can't decode byte 0xbf in position 2: illegal multibyte sequence [Finished in 0.221s]
該当のソースコード
Python3.7
1import sys # sysモジュール読み込み 2import glob # globモジュール読み込み 3import os # osモジュール読み込み 4import codecs # codecsモジュールの読み込み 5 6#sys.stdout = codecs.getwriter('utf_8')(sys.stdout) 7drive = r"C:\Users\sera\PycharmProjects\PatentApp" 8print(drive) # 確認用 9save = r"C:\Users\sera\PycharmProjects\save" 10print(save) # 確認用 11print("operation_start\n") 12 13os.chdir(drive) # カレントディレクトリを走査対象に移動 14path_list = glob.glob('**/*.xml', recursive=True) # 拡張子.xmlを網羅,リストに格納 15 16for x in path_list: # 拡張子.xml格納リストを網羅表示 17 fromdir = drive + '\' + x # 操作対象絶対パス 18 print(fromdir) # ↑の表示(確認用) 19 y = os.path.basename(fromdir) # 操作対象のファイル名取得 20 todir = save + '\' + y # 保存先ディレクトリの絶対パス 21 print(todir) # ↑の表示(確認用) 22 # ↓ 変換&新規出力 23 ff = codecs.open(fromdir, 'r', encoding='euc-jp') # 元ファイルを読み込み 24 fout_utf = open(todir, 'w', encoding='utf-8') # UTFでの新ファイルを新規作成 25 for row in ff: # 元ファイルから1行ずつ読みだして 26 fout_utf.write(row) # コピー先新ファイルに書き出す 27 ff.close() # ffを閉じる 28 fout_utf.close() # fout_utfを閉じる 29print("end")
試したこと
・#sys.stdout = codecs.getwriter('utf_8')(sys.stdout)の削除
・encoding='euc-jp'をencoding='utf-8'に書き換え
補足情報(FW/ツールのバージョンなど)
バージョン:Python3.7
開発環境:Atom1.31.2
こちらのサイトを参考にしました↓
https://www.python-izm.com/advanced/file_rw/
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/17 07:05
2018/10/17 07:07
2018/10/17 07:09 編集
2018/10/17 07:17
2018/10/17 07:21
2018/10/17 07:28
2018/10/17 07:28
2018/10/17 07:29
2018/10/17 07:57
2018/10/17 08:00
2018/10/17 08:05
2018/10/17 08:07