AIを使ってプログラムを作ってもらう『任意フォルダ内のzipファイルをすべて解凍する』

01_効率化

このブログではあまり話題に出さなかったのですが、個人的にGPT-3というAIにものすごく興味を持っています。

文章作成などができるAIなので、GTP-3を用いたサービスが最近ちらほら出てきており、使えるものは使ってみて、

『日本語だからこの程度の精度でしか文章作れないのかな?』

『まだ人間には届いてないなぁ~』

と思いながら人類が作ったAIの成長過程を観察していました。

前置きはそのくらいにして、いきなり作成したソースコードを公開

■任意フォルダ内のzipファイルをすべて解凍する ソースコード

import os
import zipfile

os.chdir('C:/Users/名前/Desktop') #カレントディレクトリの変更
for item in os.listdir():
    if item.endswith('.zip'):
        file_name = os.path.abspath(item) #.abspath絶対パスを返すメソッド
        # print(file_name) # zipの絶対パス
        with zipfile.ZipFile(file_name) as z:
            for info in z.infolist():
                info.filename = info.orig_filename.encode('cp437').decode('cp932')
                if os.sep != "/" and os.sep in info.filename:
                    info.filename = info.filename.replace(os.sep, "/")
                z.extract(info)

# 構造参考https://aiprogrammer.hashlab.jp/
#  指定文章「C:/Users/名前/Desktopの全ての圧縮ファイルを日本語の同一名称のフォルダに解凍する」
# 文字化け処理参考https://qiita.com/tohka383/items/b72970b295cbc4baf5ab

■作成手順

今回はいきなりソースコードの紹介からになりましたが、

作成手順は以下

①AI Programmerが提供するサービスを使用して構文を作り※何度か試す必要あり

https://aiprogrammer.hashlab.jp/

②例外処理だけを以下のサイトから参照して組み合わせて作成。

Python で zip 展開(日本語ファイル名対応) - Qiita
zip の中のファイル名 zip ファイルを展開(解凍)すると、書庫内の各データは元のファイル名で展開されます。すなわちファイル名情報も zip ファイル内に格納されています。 zip ファイル内に格納されている各ファイル名のエンコーディン...

■AI Programmerを使って構文を作る

誤解のないように言いますと、構文を作るためにどういったソースコードを書いてほしいか指定する必要があります。

今回指定したのは「C:/Users/名前/Desktopの全ての圧縮ファイルを日本語の同一名称のフォルダに解凍する」です。

この指定文は客観的に一意の意味にしか取れない文章にすることが大切です。

また、同じような意味の似たような言葉を使ってみても出力されるコードは異なります。

そういう意味で、何度か指定文を調整し使るコードが出るまで何度か試します。

上記の指定文で出力されたコードは以下

import os
import zipfile

os.chdir('C:/Users/名前/Desktop')
for item in os.listdir():
    if item.endswith('.zip'):
        file_name = os.path.abspath(item)
        zip_ref = zipfile.ZipFile(file_name)
        zip_ref.extractall(os.path.splitext(file_name)[0])
        zip_ref.close()

ちなみに指定方法は以下のようにします。出力したい言語に対して、指定文を記載して”コードを生成”をクリック

試してみれば、わかるのですが、実行するタイミングによっても出力される内容が異なります。

AIあるあるなのですが、内部処理が複雑なので、同じ入力でも同じ出力になるとは限りません。

なので、出力された内容は参考程度にしておき、コードをさらっとみて

問題なさそうなら自前の環境で実行してみる。

エラーが出て対処できるならやる。

ということをしていく必要があります。

なので、現実的な話をしますと、構文サンプルを作ってもらう程度に使用できる感じです。

■例外処理を何とかする

上記コードだと、zipファイル内の日本語が文字化けしていたので、そこだけ調べて対応できそうな文章に変換しました

それが、トップにあるコードですね。

この作業のためには当然上記のAI Programmerさんが出力してくれたコードを理解する必要があります。

独学でやっているもので、初見のメソッドが含まれていたりしますが、調べりゃ何かしら出てくるので、少し時間を掛ければできます。

例えば、abspathってなんだろ?と思ったのですが、os.path.abspathとあるので、osライブラリに関連するメソッドだと理解できます。

普通にabspathだけググっても絶対パスを返すメソッドだよって教えてくれるので、事足りるのですが、深く調べるためにはある程度の知識は必要です。

トップのコードに

# print(file_name) # zipの絶対パス

とコメントアウトされた一文があるのですが、これもわからないときの確認方法で、何の変数かわからないときは表示してみる。

これが手っ取り早いです。

たまに意味不明なものが表示されるのですが、その時は頑張って調べます。

■まとめ

AI Programmerは現状無料サービスとしてされていますが、将来有料化されると思いますので、興味のある人は試しておいた方が良いと思います。

有料化したときはもっと精度が上がるといいですね。

現時点の実力としては、簡単な処理の構文を言葉から作ってくれる程度なのでしょう。

言葉を考えている人間がプログラムを書くことができれば、その人が書いてしまうのが確実なのですが、どこから手を付ければよいかわからない。

ようなことに取っつくツールとしては有用と思います。

端的に言うと『これってプログラムに落とし込めたら業務が楽になるし、プログラム量も少ないはずなんだけど、具体的にどう書けばいいのかわからない』的なことに使えるってことです。

困りごとがあって、ネット上で例文を探すのって結構時間がかかるんです。

理解度が一定以上ないのと、答えに近しいものでもわからないものとして認識しちゃうのが人間です。

なので、こういったことを実現するためにはこういうプログラムの作り方があるよね?ということをいくつか例を出してほしい。

その中で自分の考え方と近しい例を見つけると、親近感に近しいものが沸いてそのコードを修正すればいいんです。

それが、学びになる。

ということで、今回もまだまだ人間には届いてないという結論でしたが、今後に期待です。

コメント

タイトルとURLをコピーしました