有没有办法在python中链接文件生成和gnupg加密?

2024-09-30 10:42:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想制作一个目录的tar文件并加密tar文件

目前,我创建了一个tar文件并将其保存到HDD中。然后,我读取tar文件来加密并保存加密版本

但我的问题是我不需要tar文件,并在进程结束时将其删除。 因此,我觉得编写tar文件是浪费时间

我的代码的形式很简单:

import tarfile
import gnupg

......

with tarfile.open(name = tarpath, mode = 'w:xz') as tar:
    for afile in files:
        tar.add(name = afile)

......

with open(tarpath, 'rb') as tarstream:
    gpg.encrypt_file(tarstream, fingerprint, output = outpath)

在代码的前半部分,tar文件被保存到磁盘中。我是否可以避免此步骤并将tar结果直接链接到gpg的输入中


Tags: 文件代码nameimport目录aswithtar
1条回答
网友
1楼 · 发布于 2024-09-30 10:42:47

您正在寻找的是BytesIO类。BytesIO类是一个处理字节流的类似文件的对象

import tarfile
import gnupg
from io import BytesIO

tarstream = BytesIO()

with tarfile.open(fileobj = tarstream, mode = 'w:xz') as tar:
    for afile in files:
        tar.add(name = afile)

tarstream.seek(0)
gpg.encrypt_file(tarstream, fingerprint, output = outpath)

要注意的要点是:

  • 额外进口
  • tarstream的手动实例化为BytesIO()
  • fileobj参数代替name参数
  • 在使用GPG加密之前手动重置光标

推荐的备选方案

正如评论中所讨论的,使用文件更好,以避免数据过大时出现内存问题。如果您不想担心手动删除文件,可以使用tempfile.TemporaryFile在文件关闭时自动删除文件

import tarfile
import gnupg
from tempfile import TemporaryFile

with TemporaryFile(mode='w+b') as tarstream:
    with tarfile.open(fileobj = tarstream, mode = 'w:xz') as tar:
        for afile in files:
            tar.add(name = afile)

    tarstream.seek(0)
    gpg.encrypt_file(tarstream, fingerprint, output = outpath)

相关问题 更多 >

    热门问题