@nodahitomi

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ファイルが破損しているか正常化を判定するPythonのスクリプトを探しています

解決したいこと

ExcelやWordやPowerPointやjpgや動画の多数(1万ファイル以上)のファイルが、[破損している]か、[正常]かを判定して、結果をcsvファイルに書き出してくれるpythonスクリプトを公開されているサイトはご存じ有りませんか?。破損しているファイルを修復するソフトは多数ありますが、チェックして判定だけするソフトを探しております。ちなみにjpgだけは市販のソフトを使用しております。
一応作成はしましたが、制度が悪く、実用にならないレベルなので、使えるレベルの物を探しております。有料ソフトでも結構です。

0 likes

3Answer

Python に限った話じゃないですが、予め正常な状態のファイルで MD5 等の チェックサム を取得しておき、再度任意のタイミングでチェックサムを確認した時に値が変わっていたらファイルの内容が書き換わっている (壊れている) とみなす…方法があります。

これはインターネットからファイルをダウンロードする時に元のファイルと比較して壊れていないか確認するため等によく使用される手法です。

個人的に、Windows のツールでは HashTools を愛用しています。

1Like

Comments

  1. @nodahitomi

    Questioner

    回答頂きましてありがとうございます。
    窓の杜とVectorにあるソフトを全て試し済みですが
    ハッシュ値は表示されても、比較する物ばかりで、
    初回スキャンだけで整合性有、無、の判定をしてくれる物は
    ありませんでした。
    もし1回のスキャンで判定してくれるソフトがあれば教えて頂ければ
    嬉しく思います。
    また機会がありましたら、どうぞ宜しくお願いします。

  2. ハッシュ値は表示されても、比較する物ばかりで、
    初回スキャンだけで整合性有、無、の判定をしてくれる物は
    ありませんでした。

    当たり前なこと言わないでください.

    予め正常な状態のファイルで MD5 等の チェックサム を取得しておき、再度任意のタイミングでチェックサムを確認した時に値が変わっていたら

    他のコメントでもありますが「破損」の明確な定義を補足願えませんか?
    JPGにいたっては非可逆圧縮ですから完全に元のデータを再現しない前提で作られてる規格であるのはご存知でしょう??

  3. @nodahitomi

    Questioner

    コメント、ありがとうございます。

    >「破損」の明確な定義を補足願えませんか?

    私としての定義は、画像の理論上の定義とは異なります。

    静止画像の場合でしたら、「破損していない」と思う定義は、
    1:目視で全面積が表示される。
    2:目視で1枚の画像に複数枚の画像が重なって見えない。
    3:目視で色が再現されている。
    4:ファイルがフォトで開ける。
    5:拡張子が.WindowsのエクスプローラでJPGの文字がある。バイナリーデータで拡張子がJPGの16進数である、です。

    「破損」の定義は、1:Windows付属のフォトで開けない。
    2:複数枚の画像が重なって見える。
    3:色が飛んでいる。
    4:拡張子が消失している。

    >JPGにいたっては非可逆圧縮ですから完全に元のデータを再現しない前提で作られてる規格であるのはご存知でしょう??

    [非可逆圧縮]かどうかは私は重要ではありません。JPGは圧縮されている仕様なのでRAWデータとは異なる点は理解しています。そもそもRAWデータもデジタルなので元のデータでは無いですが・・・。
    一般の方が正常な画像と感じて再利用が可能なら正常と思う訳です。バイナリーデータレベルで破損していても構わないのです。データフォレンジックの世界ではありませんから。らんぼうな言い方ですと、ヘッダーやメタデータの重要な部分が正常なら「正常」と判断したいのです。

  4. 乱暴と言うよかあんまり論理として成立してないこと言うのも勘弁して欲しいものですが,方法論を論じようにも肝心の目視正常というのが定量化されてない.ここがはっきり提示されていないと無茶苦茶な応酬が続くだけですので,とりあえずもうちょっと勉強してください.当然ながらどこかにあるスクリプトなんてものを例示することもできません.
    画像処理AIみたいなことをしたいならまず論文を読んでください.

    [非可逆圧縮]かどうかは私は重要ではありません。JPGは圧縮されている仕様なのでRAWデータとは異なる点は理解しています。

    それが目視的異常とやらに関わるので言っています.JPGの仕様書読んでください.

  5. ちょっと画像処理の知識があればお分かりかと思いますが,内容の自然性というのは必然的に自然的に読める大量のデータと計算コストを必要とします.「破損」チェックごときにこうした判定を行うのは全くもって無駄であり,内容の正常性を確保したいのであればチェックサムの確認が簡単かつ至上の方法たりうるのです.
    自然に読めるファイルそのものが同じであることが分かるならば,当然自然に読めるので十分な条件です.
    ご想像の方法は一般的にはコストがものすごくかかる処理であり,目的に見合わない方法であるということです.

  6. 拡張子が消失している。

    拡張子はファイルの内容とは関係ありません。拡張子を消してもダブルクリックで開けなくなるだけで、フォトアプリ側から開く操作をすれば開けますし、拡張子を書き足せば元に戻ります。ヘッダから判断して拡張子を足すスクリプトも簡単に書けますが、それでも破損とみなしていいんですか?

    一般の方が正常な画像と感じて再利用が可能なら正常と思う訳です。

    ちょっと曖昧すぎますね。たとえば画像の下半分がごっそり切れても、一般の人は横長なだけの正常な画像と思うかもしれません。

    「いや、写っているものを見れば分かるんだ」とか「100枚あるうち1枚だけ横長なら破損だと分かるんだ」とかいう場合は、そのような条件も破損の判定に関わってくるので、詳しく説明してください。

    一般の方が正常な画像と感じて再利用が可能なら正常と思う訳です。〔略〕らんぼうな言い方ですと、ヘッダーやメタデータの重要な部分が正常なら「正常」と判断したいのです。

    矛盾しています。ファイルが開けて正常に見えてもヘッダが壊れている(たとえば解像度や画像縦横サイズのメタデータが実際と違う)場合や、逆にヘッダ部分が正常でもデータ本体は開けないほど破損していることもあります。

    またヘッダの重要な部分というのも開くアプリによりますね。ヘッダが異常でも表示を試みるアプリもあれば、整合性を厳密にチェックしてエラーを出すアプリもあります。

破損をどう判定するかはファイルフォーマットに大きく左右されるため、特定のフォーマットに特化したツールを組み合わせる形になるかと思います。

一般的なメディアフォーマット(画像と動画)をチェックするスクリプトは見つかりました。

MS Office のファイルは、 .xlsx のように x で終わる拡張子なら zip で圧縮された形式になっているはずなので、 zip の整合性をチェックするツールを使うとよさそうです。

1Like

Comments

  1. @nodahitomi

    Questioner

    おそらく、[Badpegy]だと思いますが、そのソフトはGoogleで検索できる唯一のサイトだとうと思います。以前から、繰り返し検証していましたが、殆どのjpgが[破損]と判定されるのが難点でした。
    目視で正常に見え、且つ開けるファイルも[破損]と判定される事を確認しています。
    判定は理論的には間違っていないのだろうと思いますが、精度の強弱が設定できませんので、私の用途からしますと実用にはならないレベルかと思っています。
    ちなみに市販されている唯一のソフトも目視で正常なJPG画像も破損と判定されますが破損率を%で表示してくれるので、並べ替えて任意の%で一括削除すれば
    実用になります。
    Pythonのライブラリー関数も殆ど試しましたが、整合判定が曖昧でした。
    但し全てのライブラリーがインストールできた訳ではなく、
    原因不明のエラーが発生する物がありますので、汎用としては厳しい注文なのでしょう。

    回答頂きましてありがとうございました。
    機会がございましたら、ご教授頂ければ幸いです。

  2. おそらく、[Badpegy]だと思いますが、そのソフトはGoogleで検索できる唯一のサイトだとうと思います。

    Badpegy で検索しても見つかりません。 Bad Peggy のことですか?私の提示したスクリプトでは Bad Peggy は使わずに別の方法で破損を検証しています。

    目視で正常に見え、且つ開けるファイルも[破損]と判定される事を確認しています。
    判定は理論的には間違っていないのだろうと思いますが、精度の強弱が設定できませんので、私の用途からしますと実用にはならないレベルかと思っています。

    データ的には破損していても目視では気づかないレベルに収まっている、ということは十分あり得ますね。そういうファイルは正常とみなすということですか?用途の想像がつきませんので、これ以上の回答がご希望なら用途を詳しく説明してください。特に以下の点について情報が必要であり、内容によっておすすめできる手段も変わってきます。

    • そもそも何が理由でファイルが破損しているのか
    • どのような種類のファイルを扱うのか
    • なぜ目視で正常っぽく見えれば正常と扱っていいのか、どの程度正常ならいいのか
    • 破損したファイルをどうしたいのか、なぜ削除するのか

    Pythonのライブラリー関数も殆ど試しましたが、整合判定が曖昧でした。

    データが破損しているなら破損しているのであって、目視で判断するほうが曖昧だと思いますが……どのような意味での曖昧ですか?

ちなみにjpgだけは市販のソフトを使用しております。

これの名前か詳細な仕様を共有するのがベストな気がしますね。
あなたの説明は曖昧で定義不足なところがあります。なので上記のソフトを提示して、これのpng版、動画版…はないか?と質問したほうが回答が得やすいかと。

ちなみに私はあなたの願望を叶えることは出来ないと考えています。
あなたの言う"破損"、"正常"はあなたの主観すぎます。"定量化"できないとソフトして組み上げることができません。
どんだけの数があるか分かりませんが、結果的には手動がベストな選択肢かと思います。

0Like

Your answer might help someone💌