はじめに
前回の記事では、ファイル名をデコードする方法を紹介しました。
今回の記事では、添付ファイルのデコードから新しいファイルの生成まで行っています。
ディレクトリ構造
/home/$user/eucjpDecoder
eucjpDecoder内にdownloadedとattachディレクトリを作成し、downloadedディレクトリ内にPukiwikiの添付ファイルが保存されているattachディレクトリを挿入します。
こちらの環境では、Zipファイルの展開先をdownloadedディレクトリに指定しました。
##コード
import os
import shutil
import pdb
pdb.set_trace()
fileList = os.listdir(path="./downloaded/attach")
for i in range(len(fileList)):
print(fileList[i],i)
# 拡張子が付いているファイルは除外---
if "." in fileList[i]:
continue
# ---
elif "_" in fileList[i]:
fileName = fileList[i].split("_") # ファイル名を_で分割
# 分割したファイル名を変数に代入---
bytePageName = bytes.fromhex(fileName[0]).decode("euc_jp", errors="backslashreplace") # Pukiwikiでのページ名
byteFileName = bytes.fromhex(fileName[1]).decode("euc_jp", errors="backslashreplace") # Pukiwikiでのファイル名
# ---
# ファイルのパス---
newFilePath = os.getcwd() + "/attach/" + bytePageName.replace("/","_")+"--"+byteFileName.replace("/","_") # 新しく生成するファイルの絶対パス
downloadedFilePath = os.getcwd( ) + "/downloaded/attach/" + str(fileList[i]) # 16進数表記になっているファイルの絶対パス
# ---
# 新しく生成するファイルを指定したパス内に生成する---
if os.path.isfile(newFilePath)==False:
open(newFilePath, mode="w") # 空ファイル生成
# ---
shutil.copyfile(downloadedFilePath, newFilePath) # 16進数表記になっているファイルの中身を新しく生成したファイルにコピー
注意事項
デコードに失敗してしまうファイルがほんの少しですが存在しました。
デバッガを起動しながら、何番目のファイルでデコードに失敗したのかを把握しておきましょう。
デコードに失敗したファイルは手動でデコードさせます。
さいごに
Pukiwikiの添付ファイルを短時間で大量に手元に戻しておきたい、というニーズが世界で何件あるのか...
もしそのようなニーズがあるのであれば、参考にしてみてほしいです。