Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@iikyara

pyminizipの日本語パスについて

More than 1 year has passed since last update.

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:公式のやつ

0
Help us understand the problem. What is going on with this article?
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
iikyara
不定期だけど世間に役立ちそうなことあったときにまとめて更新します。 いや、それQiitaの趣旨じゃん。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?