Help us understand the problem. What is going on with this article?

pyminizipの日本語パスについて

pyminizipって?

ファイルのzip圧縮をpythonで出来ますよってやつ。
pythonの標準ライブラリでzipfileってのもあるけど、こっちはzipにパスワードがかけれない。
今回はパスワードをかけたかったのでpyminizipを使ってみた。

私の環境

windows10(Pro)です。
pythonはPython 3.7.1です.あんま関係ないかもだけど。
この記事は僕みたいなMicrosoft社の甘い蜜を吸い続けているWindowsユーザ向けです。
UNIX民は自力で何とかするよね!

インストール

以下のコマンドを打つだけ

pip install pyminizip

どうやって使うの

こんな感じで書いたらオッケー

test_zip.py
import pyminizip

pyminzip.compress(
    'ソースファイル名',
    'ソースファイルプレフィックス',
    '出力ファイル名.zip',
    'パスワード',
    int(0)               #圧縮率:0~9 (0は無圧縮)
)

第1引数:zip圧縮したいファイル名
第2引数:zip圧縮後,ファイルを置きたいディレクトリ
第3引数:出力ファイル名
第4引数:パスワード
第5引数:圧縮率.0~9を指定できる.0は無圧縮

例えば、pyminizip.compress('src/src.txt', 'dir', 'output.zip', 'password', int(0))という風に実行すると、実行した場所にdir/src.txtを内部に持つzipファイルがoutput.zipというファイル名で出力される。

本題

日本人ならソースファイル名とか出力ファイル名とか、日本語で出力したいときありますよね?
でも、pyminizipは普通に文字列を投げただけじゃエラーが出ます。エラーは以下のように出てきます。

Traceback (most recent call last):
  File "test_zip.py", line 28, in <module>
    test1()
  File "test_zip.py", line 16, in test1
    int(0)
OSError: error in opening output/テスト.txt for reading

で、どうすれば良いかというと、次のようにしてあげます。

test_zip.py
import pyminizip

pyminzip.compress(
    'ソースファイル名'.encode('cp932'),
    'ソースファイルプレフィックス'.encode('cp932'),
    '出力ファイル名.zip'.encode('cp932'),
    'パスワード'.encode('cp932'),
    int(0)               #圧縮率:0~9 (0は無圧縮)
)

文字コードをcp932にしてあげると通ります。
Windowsがcp932を使っているのが理由でしょうね。

まとめ

パスワード付きのzipファイルを作りたいけど、標準ライブラリのzipfileじゃできないから、pyminizip使おうとしたけど、日本語ファイルでエラー出るじゃんってときの解決方法でした。
誰かの役に立てば良し。
思い返して見るのも良し。

参考

pyminizip:公式のやつ

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした