LoginSignup
0
0

More than 3 years have passed since last update.

[実践編]Pukiwikiのエンコードされた添付ファイルの名前をデコードする方法2

Posted at

はじめに

前回の記事では、ファイル名をデコードする方法を紹介しました。
今回の記事では、添付ファイルのデコードから新しいファイルの生成まで行っています。

ディレクトリ構造

/home/$user/eucjpDecoder

eucjpDecoder内にdownloadedattachディレクトリを作成し、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の添付ファイルを短時間で大量に手元に戻しておきたい、というニーズが世界で何件あるのか...
もしそのようなニーズがあるのであれば、参考にしてみてほしいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0