質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

Q&A

解決済

1回答

4264閲覧

Pyminizipでパスワードを設定したZipファイルを作成する方法

Shiwa

総合スコア8

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

0グッド

0クリップ

投稿2020/03/10 05:24

◎試した内容

import pyminizip pyminizip.compress("c:\test\1.txt","\","c:\test\new1.zip","password01",9)

◎エラー内容

DeprecationWarning: PY_SSIZE_T_CLEAN will be required for '#' formats pyminizip.compress("c:\test\1.txt","\","c:\test\new1.zip","password01",9)

どのようにすればエラーを回避できますでしょうか。
この方法がどうしても上手くいかず、7-zipのコマンドを試してみました。
7-zipコマンドでは予め指定したパスワードを入れることしかできませんでした。
ランダムなパスワードを代入して付与したく、pyminizipを試したい次第です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

Pythonに拘らず、Rubyを使うことで簡単に解決できました。

私はビギナーであり、Pythonを第一言語として勉強してきました。
そのため他の言語を使うことに不安がありました。
しかしPythonに関する簡単な知識があったおかげで30分くらいで解決しました。

以下がzipにランダムなパスワードを付けてフォルダごと圧縮するコードです。
puts random_passは生成したパスワードで解凍できるかを試すために置いています。
確認後は要らない命令文です。

# ランダムなパスワードを生成 require 'securerandom' random_pass = SecureRandom.hex(6) puts random_pass # zipの作成開始 require 'zip' zip_file_name = "0001.zip" password = Zip::TraditionalEncrypter.new(random_pass) # zipパスワードを代入 entries = Dir.glob("src/*") # srcフォルダ内のファイル名を配列に登録 Zip::OutputStream.open(zip_file_name, password) do |out| # input_dirフォルダ内のファイル名のループ entries.each do |entry| # ファイルパスのうち、ファイル名のみを取得する file_name = File.basename(entry) # zip内にファイル名と内容を登録 out.put_next_entry("files/" + file_name) out.write( File.read(entry) ) end end

参考にしたURL
https://www.sejuku.net/blog/46236
https://www.sejuku.net/blog/15339

投稿2020/03/12 01:12

Shiwa

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問