71
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【ジョークアプリ】壊れたファイルを生成するツール

Last updated at Posted at 2021-04-12

はじめに

大学の課題が終わらない。そんなことありますよね?
そんな時に役立つツールを開発しました。
(ジョークアプリです。このアプリの使用により起きたトラブルに当方は一切責任を負いません。)

概要

 拡張子、ファイルサイズ、ファイル名を指定することで、あたかも提出する際に壊れてしまったかの様なファイルを作成します。締め切りに間に合わなくてもとりあえず出したという既成事実を得られるのではないでしょうか?
 そんなコードを紹介します。
 まずは雛形であるmain関数を作成し、そこから文字化け作成用の関数をimportすることで動作する仕組みです。

main.py
import os.path
import mojibake as moji

def main(func):
    file_name = input("ファイル名を入力してください:")
    ext = input("拡張子を入力してください:")
    size = float(input("ファイルサイズを入力してください(MB):"))

    size *= 1024 ** 2
    file_size = 0

    while(size > file_size):
        file = file_name + '.' + ext
        f = open(file, "a")
        f.write(func)
        f.write('\n')
        file_size = os.path.getsize(file)
    f.close()

if __name__ == '__main__':
    main(moji.yabainari)

 これは、importした関数に引数を与えるだけのプログラムなので文字化けアルゴリズムであるパッケージは自分で用意する必要があります。mainにあたえる引数を変えてお楽しみください。
 文字化けアルゴリズムの作成例を2つ書きました。

例1

 ダイバージェンス1%の向こう側へいけずに、課題提出できなかった人がお使いください。

mojibake.py
def suzuha(size, file):

    s = '失敗した' # 任意の文字列
    s_size = 18  # 文字列のbyte数

    with open(file, 'w', encoding='utf-8') as f:
        i = 0 
        while size > i:
            f.write(s)
            i += s_size
        else:
            f.write('わたしは失敗した') # 任意の文字列にするときはelse文をコメントアウト

このコードの出力結果をテキストエディタで見てみましょう。

image.png

最後だけ処理を変えているため、多少ファイルサイズは変わります。大まかなサイズがあっていればよいでしょう。
pdfビューアで開くとこんな感じです。

image.png

バッチリ壊れてます。
メモ帳で開かれたら失敗したどころではなくいろいろと終わります。
任意の文字列とそのサイズに書き換えることで好きな言葉でファイルを埋められますが、教授への悪口などは絶対にやめましょう。 

例2

 例1では文字化けと言うより、テキストファイルを拡張子を変えて開くことで、あたかも壊れているかのように見せるコードでした。例2ではよりリアルな文字化けを引き起こすプログラムを作成しました。そんなコードがこちらです!

mojibake.py

def yabainari(size, file):
    import struct, random

    with open(file, 'wb') as f:
        for i in range(0, int(size)):
            f.write(struct.pack('B', random.randint(0, 255)))

ランダムなbit列を作成して、バイナリモードで書き込むことで文字化けを引き起こします。

実際に出力結果をテキストエディタで見てみましょう。

image.png

完璧ですね。もちろんpdfビューアでも開けません。

まとめ

 こんなコード書いてる暇があったら、課題にとりかかりましょう。
今回のコードはgithubにものせています -> https://github.com/yoh333/broken_maker

最後に一言…

課題は期限内に!(戒め)

 

71
27
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
71
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?