如何使用 pyminizip 在 Python 3.x 中创建临时 ZIP?

2024-03-12

我需要创建一个临时 zip 文件来存储文件。该 ZIP 文件需要加密,所以zipfile不会在这里做的伎俩。该文件将被进一步加密(ZIP 将再次加密为另一个文件),因此压缩文件被用作减小其大小以实现更快的互联网传输以及第一层加密的一种方法。 这是我到目前为止所得到的:

import getpass
import tempfile
import pyminizip

def ZipFunction():
    #This zips the file and encrypts it with a password
    filename = input('Enter the file name: ')
    passkey = getpass.getpass(prompt='Enter the password for the file: ')
    passkey2 = getpass.getpass(prompt='Confirm the password: ')
    if passkey != passkey2:
        print('The passwords must be the same! Please restart the process.')
        exit()
    else:
        #Here's where I need help
        with tempfile.TemporaryFile() as tmp:
            with pyminizip.compress(filename,None,tmp,passkey,9) as archive:
                zipstring = archive.readlines()

        #From here on the zipstring var is encrypted and creates the "further encrypted"
        #file. From here on the script works normally

返回的错误是ValueError: expected arguments are compress(src, srcpath, dst, pass, level)。 我愿意将 pyminizip 更改为另一个可以创建加密 zip 文件的工具。这个“双重加密层”是客户的需求,虽然我并不认为有必要,但我没有权力将其从项目中废弃。 我不习惯处理临时文件。我在这里做错了什么?


随着tempfile https://docs.python.org/3.8/library/tempfile.html- 可以创建模块临时文件,关闭或离开时自动删除这些文件with https://docs.python.org/3/reference/compound_stmts.html#with-堵塞。随着pyminizip https://pypi.org/project/pyminizip/- 可以获得模块加密的zip文件。

pyminizip.compress期望第三个参数是生成的 zip 文件的保存路径。如果文件已存在,则会尝试覆盖它。当前代码使用对临时文件的引用(tmp),这会导致观察到的错误消息:

ValueError: expected arguments are compress(src, srcpath, dst, pass, level) 

错误的直接原因是使用了引用本身而不是其文件名,即为了避免错误,tmp.name实际上应该使用而不是tmp。但是,如果更改此设置,则会生成不同的错误消息,即

OSError: error in closing <path to temo file> (-102)                                    

这是因为 pyminizip-module 尝试在临时文件仍打开时删除它。如果之前关闭了临时文件,它将被覆盖,并且不会出现错误消息。但是,这只会创建一个普通文件,而不是临时文件,即该文件不会被删除自动地当关闭或离开时with-block.

因此,无法使用 tempfile 和 pyminizip 模块创建临时的加密 zip 文件这样。然而,tempfile-module 允许创建临时文件以及临时目录。与临时文件一样,临时目录在离开时会被删除with-堵塞。如果删除临时目录,其中包含的文件也会被删除。因此,替代方案是常见的加密 zip 文件(使用 pyminizip 模块创建),它们存储在临时文件夹中(使用 tempfile 模块创建):

...
with tempfile.TemporaryDirectory() as tdir:
    sourceFile = <path to file to be zipped>
    destinationFile = "destFile.zip"
    password = "whatever"
    compression_level = 9 # 1-9
    pyminizip.compress(sourceFile, None, tdir + "\\" + destinationFile, password, compression_level)

    # inside with-block: temp-directory and contained encrypted zip-files exist
    ...                     

# outside with-block: temp-directory and contained encrypted zip-files deleted
...                     

If the with-block 保留后,临时目录及其包含的任何加密 zip 文件将被删除。

顺便一提:pyminizip.compress不支持with-陈述。这会导致错误消息:AttributeError: __enter__。在当前代码中你看不到这个错误消息,因为发布的错误消息是之前触发的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 pyminizip 在 Python 3.x 中创建临时 ZIP? 的相关文章

  • 为什么Python有最大递归深度?

    Python有最大递归深度 但没有最大迭代深度 为什么递归受到限制 把递归当成迭代来对待 而不限制递归调用的次数不是更自然吗 我只想说这个问题的根源来自于尝试实现流 参见这个问题 https stackoverflow com questi
  • 带有指针数组的 cython

    我在 python 中有一个 numpy ndarrays 列表 具有不同的长度 并且需要非常快速地访问 python 中的列表 我认为指针数组就可以解决问题 我试过 float type t list of arrays no of ar
  • Pyenv 无法在 Cygwin 上安装 python: ModuleNotFoundError: No module named '_ctypes'

    我正在尝试设置 Cygwin 环境以使用 pyenv 来管理 python 版本 我没有管理员权限 所以我使用以下命令运行设置 no admin flag 我使用 Cygwin 包管理器应用程序解决了一些依赖关系 但我被困在了这一点上 Mo
  • 带括号的上下文管理器

    我试图了解新的新内容带括号的上下文管理器Python 3 10 中的功能 新功能中的顶部项目here https docs python org 3 10 whatsnew 3 10 html 我的测试示例是尝试编写 with open f
  • Python 小数.InvalidOperation 错误

    当我运行这样的东西时 我总是收到此错误 from decimal import getcontext prec 30 b 2 3 Decimal b Error Traceback most recent call last File Te
  • 创建圆形图像 PIL Tkinter

    Currently I have a zoom feature in my application that works very well however I d like the actual zoom box to be a circ
  • 使用信号时出现 django TransactionManagementError

    我有一个与 django 的用户和 UserInfo 一对一的字段 我想订阅用户模型上的 post save 回调函数 以便我也可以保存 UserInfo receiver post save sender User def saveUse
  • 引发 RuntimeError(f"目录 '{directory}' 不存在") RuntimeError: 导入 fitz 时目录 'static/' 不存在

    当我运行 extract img py 文件时出现此错误 RuntimeError f 目录 directory 不存在 运行时错误 导入 fitz 时不存在目录 static 我不明白为什么这会给我发回此错误消息 我之前看到过关于这个话题
  • 创建一个打开文件并创建字典的函数

    我有一个正在处理的文件 我想创建一个读取文件并将内容放入字典中的函数 然后该字典需要通过 main 函数传递 这是主程序 它无法改变 我所做的一切都必须与主程序配合 def main sunspot dict file str raw in
  • 如何在Python中的BeautifulSoup4中使用.next_sibling时忽略空行

    由于我想删除 html 网站中重复的占位符 因此我使用 BeautifulSoup 的 next sibling 运算符 只要重复项位于同一行 就可以正常工作 参见数据 但有时它们之间有一个空行 所以我希望 next sibling 忽略它
  • 使用字母而不是数字进行顺序计数[重复]

    这个问题在这里已经有答案了 我需要一种方法 将字符串 递增 到 z 然后将 aa 递增到 az 然后将 ba 递增到 bz 依此类推 就像 Excel 工作表中的列一样 我将向该方法提供前一个字符串 它应该增加到下一个字母 PSEUDO C
  • 在 keras 中使用自定义张量流操作

    我在张量流中有一个脚本 其中包含自定义张量流操作 我想将代码移植到 keras 但我不确定如何在 keras 代码中调用自定义操作 我想在 keras 中使用tensorflow 所以到目前为止我发现的教程描述了与我想要的相反的内容 htt
  • 使用 Python 的文本中的词频但忽略停用词

    这给了我文本中单词的频率 fullWords re findall r w allText d defaultdict int for word in fullWords d word 1 finalFreq sorted d iterit
  • Pandas Pivot_Table :非数字值的行计算百分比

    这是我在数据框 df 中的数据 Document Name Time SPS2315511 A 1 HOUR SPS2315512 B 1 2 HOUR SPS2315513 C 2 3 HOUR SPS2315514 C 1 HOUR S
  • 在Python中计算结构体的CRC

    我有以下结构 来自 C 中的 NRPE 守护程序代码 typedef struct packet struct int16 t packet version int16 t packet type uint32 t crc32 value
  • Flask SQLAlchemy 与 MyPy - 模型类型错误

    我遇到了以下组合问题flask sqlalchemy and mypy 当我定义一个新的 ORM 对象时 例如 class Foo db Model pass where db是使用创建的数据库SQL炼金术应用于flask app mypy
  • 请求response.iter_content()获取不完整的文件(1024MB而不是1.5GB)?

    您好 我一直在使用此代码片段从网站下载文件 到目前为止 小于 1GB 的文件都很好 但我注意到 1 5GB 文件不完整 s is requests session object r s get fileUrl headers headers
  • 在读/写二进制数据结构时访问位域

    我正在为二进制格式编写一个解析器 这种二进制格式涉及不同的表 这些表同样采用二进制格式 通常包含不同的字段大小 其中 50 100 个之间 大多数这些结构都有位域 并且在 C 语言中表示时看起来像这样 struct myHeader uns
  • Selenium Python 使用代理运行浏览器[重复]

    这个问题在这里已经有答案了 我正在尝试编写一个非常简单的脚本 该脚本从 txt 文件获取代理 不需要身份验证 并用它打开浏览器 然后沿着代理列表循环此操作一定次数 我确实知道如何打开 txt 文件并使用它 我的主要问题是让代理正常工作 我见
  • Shap - 颜色条不显示在摘要图中

    显示summary plot时 不显示颜色条 shap summary plot shap values X train 我尝试过改变plot size 当绘图较高时 会出现颜色条 但它非常小 看起来不应该 shap summary plo

随机推荐

  • python - 是否可以创建“def”列表? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道是否可以创建一个 def 列表 连接 20 个按钮的列表 并为每个按钮设置不同的回调 Thanks def在Python中只是
  • 自定义类扩展 FloatingActionButton 时出错

    我创建了一个自定义类并扩展了FloatingActionButton public class customFAB extends FloatingActionButton public customFAB Context context
  • 在 Pytorch 中执行优化时如何对变量应用界限?

    我正在尝试使用 Pytorch 进行非凸优化 试图最大化我的目标 因此在 SGD 中最小化 我想限制因变量 x gt 0 并且 x 值的总和小于 1000 我认为我已经以斜坡惩罚的形式正确实施了惩罚 但我正在努力解决 x 变量的边界问题 在
  • 表单提交 keyCode == "enter" (13)

    I need to submit the content of a form when I press the Enter key but only if the form has no error message I built up t
  • 如何在react中进行fetch?

    下午好 我从服务器获取json 我处理它 但是对渲染的调用发生了2次 Google 在构造函数中创建一个空对象 如果该对象没有属性 则返回 undefined 但我也有数组 应用程序从中崩溃 我附上代码 如何将数据取出状态 是否可以在渲染中
  • NSJSON序列化

    我在使用某些公共 json 服务时遇到问题 以这种方式格式化的服务 jsonFlickrFeed title Uploads from everyone link http www flickr com photos description
  • Android 本地化 es-r419

    我正在本地化我的应用程序 支持的语言 区域之一是 Espanol 419 Android 不支持命名约定values es r419 但它接受values en rGB 我应该使用什么名称才能使其正常工作 我不知道r419从何而来 我唯一能
  • 让左栏一直向下延伸

    我已经为此绞尽脑汁近三天了 我读过很多关于 3col 拉伸 设置清晰和使用绝对位置和相对位置的文章 很多是矛盾的 我认为 我想要一个非常简单的布局 我想要左侧的导航 div 左侧有两个 div 和一个页脚 如果我使用表格 它会是这样的 ta
  • 如何在不打开 Flutter 上默认电子邮件应用程序的情况下发送邮件?

    是否可以在不打开默认电子邮件应用程序的情况下发送电子邮件 直接地 我用了两个插件 但两者都是打开默认应用程序 Using flutter email sender plugin final Email email Email body Ve
  • 为什么我不能将 PHP 类实例存储为 SESSION 变量

    我有一个 PHP 脚本 可以通过 Dojo Ajax xhrGet 调用以两种方式进行调用 第一次使用 init 参数调用它 这会导致脚本创建 StateList 类的实例并读入状态名称文件 session start include St
  • 使用 Sharp 库的 Firebase 部署功能在 Google Cloud Build 中失败

    从 Bitbucket Pipelines 迁移到 Google Cloud Build 后 Firebase 部署失败 该设置在 Bitbucket Pipelines 和本地都成功部署 除了下面的错误之外 没有给出进一步的解释 我对代码
  • 如何启用码头登录?

    我正在尝试调试我的情况 其中简单的 ActiveWeb 应用程序未在 Jetty 下运行 它的行为就像不存在任何用于请求处理的类一样 并返回错误 404 问题不在于 ActiveWeb 这是关于杰蒂的 如何发现 Jetty 有一些 Web
  • 谷歌浏览器扩展:如何多次打开新的浏览器窗口?

    我的 Chrome 扩展程序使用这个简单的 JS 打开一个新的浏览器窗口 chrome browserAction onClicked addListener function tab var room new Date getTime w
  • ViewPager 使用视图而不是片段

    I ve a ViewPager现在使用Views代替Fragments显示每个选项卡 每个选项卡都会扩展相同的布局文件 Overview In this ViewPager 我应该将地雷添加为选项卡 因此基本上每个选项卡都对应于一个特定的
  • 如何不使用gopath导入本地包

    我用过GOPATH但对于我当前面临的这个问题 它没有帮助 我希望能够创建特定于项目的包 myproject binary1 go binary2 go package1 go package2 go 我尝试了多种方法 但如何得到packag
  • 无法在 Electron 应用程序中使用 Discord OAuth2

    我正在尝试创建一个 Electron 应用程序 使用 Electron net 和 MVC 并使用 Discord 的 OAuth2 进行用户登录 然而 当加载 OAuth2 页面时 Discord 认为我使用的 Discord 安装已损坏
  • 如何捕获远程系统网络流量?

    我一直在使用wire shark来分析socket程序的数据包 现在我想看看其他主机的流量 因为我发现我需要使用只有Linux平台支持的监控模式 所以我尝试了但我无法捕获在我的网络中传输的任何数据包 列为捕获的 0 个数据包 设想 我有一个
  • 升级到 flutter 3.0.1 后更新 CocoaPods 时出错

    我在用MacBook Pro M1 芯片 OS is MacOS 蒙特利 12 3 1 今天我将flutter从2 5 4升级到3 0 1 我可以在 Android 中完美运行我的项目 但是在 iOS 中我收到以下错误 Launching
  • 关闭 seeds.rb 中的验证

    如何关闭验证Rails 3 2 3 in seeds rb 我做了这个 u1 User create email email protected cdn cgi l email protection password 123 validat
  • 如何使用 pyminizip 在 Python 3.x 中创建临时 ZIP?

    我需要创建一个临时 zip 文件来存储文件 该 ZIP 文件需要加密 所以zipfile不会在这里做的伎俩 该文件将被进一步加密 ZIP 将再次加密为另一个文件 因此压缩文件被用作减小其大小以实现更快的互联网传输以及第一层加密的一种方法 这