问题标签 [tarfile]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 文件存在错误 - Python tarfile
我在 Ubuntu 环境中的 tarfile 包遇到了一个有趣的问题。我在 /tmp/ 文件夹中有 jdk 包 (jdk-7u5-linux-x64.tar.gz) 和另一个包 (blah.tar.gz)。两者都可以(这意味着我可以通过右键单击它们来提取它们)。使用 blah.tar.gz 包,我使用流动代码:
它运作良好。但是,当我尝试使用 jdk 包时( tar = tarfile.open('/tmp/jdk-7u5-linux-x64.tar.gz', 'r:gz') )。我收到以下错误:
我仍然不知道这里出了什么问题。因为当我将 jdk 包移动到另一个文件夹并使用该代码时,它再次运行良好。在运行代码之前,“tmp”文件夹是空的。有谁知道如何解决这个问题?
python - 提取包含以 / 开头的文件夹的 tar 文件
我正在用python编写一个程序并tarfile
用来提取tarfile。其中一些 tar 文件包含以 a 开头的文件夹/
(或者对于 windows \
),这会导致问题(文件被提取到错误的位置)。我怎样才能解决这个问题并确保提取最终在正确的位置?
python-3.x - 如何在 Python3 中将字符串添加到 tarfile
我str
在 python 中添加到 tar arhive 时遇到问题。在 python 2 中,我使用了这样的方法:
它与这里的内容基本相同。它运作良好。但是,转到 python 3 它坏了并导致以下错误:
老实说,我很难理解它的来源,因为我没有将任何内容反馈str
给tarfile
模块回到我构造StringIO
对象的位置。我知道和的含义StringIO
,str
字节等从 python 2 到 3 发生了一些变化,但我没有看到错误,也无法想出更好的逻辑来解决这个任务。
我精确地创建StringIO
对象以围绕要添加到存档的字符串提供缓冲区方法。然而让我感到震惊的是,有些str
人没有提供它。最重要的是,围绕似乎负责校验和计算的行引发了异常。
有人可以解释一下我的误解,或者至少举一个例子,如何在str
不在文件系统上创建中间文件的情况下向 tar 存档添加一个简单的文件。
python - 如何在 Python 3 中从字节缓冲区构造内存中的 TarFile 对象?
是否可以使用包含 tar 数据的缓冲区在内存中创建 TarFile 对象,而无需将 TarFile 写入磁盘并再次打开它?我们得到通过套接字发送的字节。
像这样的东西:
注意:这样做的原因之一是我们最终希望能够同时使用多个线程执行此操作,因此如果两个线程尝试同时执行此操作,则可能会覆盖使用临时文件。
感谢您的任何帮助!
python - Python tarfile 和排除
这是 Python 文档的摘录:
如果给出了 exclude,它必须是一个接受一个文件名参数并返回一个布尔值的函数。根据这个值,相应的文件要么被排除(真),要么被添加(假)。
我必须承认我不知道这意味着什么。
此外:
2.7 版后已弃用: exclude 参数已弃用,请改用 filter 参数。为了获得最大的可移植性,filter 应该用作关键字参数而不是位置参数,以便最终删除 exclude 时代码不会受到影响。
好的......以及“过滤器”的定义:
如果指定了过滤器,它必须是一个接受 TarInfo 对象参数并返回更改后的 TarInfo 对象的函数。如果它返回 None,则 TarInfo 对象将从存档中排除。
... 回到原点 :)
我真正需要的是一种将排除的数组(或“:”分隔的字符串)传递给 tarfile.add 的方法。
如果您尝试解释 PyDocs 中的那些段落,我不介意。
PS:
这只是我的想法:
- 制作源目录内容列表的数组
- 弹出排除
- 对剩下的单个数组成员执行 tar.add
但是,我希望以更有文化的方式完成
python - 在 Python 中检查 tarfile 的完整性
我正在将我的备份脚本从 shell 转换为 Python。我的旧脚本的功能之一是通过执行以下操作检查创建的 tar 文件的完整性: gzip -t 。
这在 Python 中似乎有点棘手。
似乎这样做的唯一方法是读取 tarfile 中的每个压缩的 TarInfo 对象。
有没有一种方法可以检查 tar 文件的完整性,而不需要提取到磁盘或将其保存在内存中(完整地)?
freenode 上#python 上的好人建议我应该逐块读取每个 TarInfo 对象,丢弃读取的每个块。
我必须承认我不知道如何做到这一点,因为我刚刚开始使用 Python。
想象一下,我有一个 30GB 的 tarfile,其中包含从 1kb 到 10GB 的文件......
这是我开始编写的解决方案:
这段代码远未完成。我不敢在一个巨大的 30GB tar 存档上运行它,因为在某一时刻,检查将是 10+GB 的对象(如果我在 tar 存档中有这么大的文件)
奖励:我尝试手动破坏 zero.tar.gz(十六进制编辑器 - 编辑几个字节的中间文件)。第一个 except 没有捕获 IOError ......这是输出:
python - Python tarfile - 检查 tar 中的文件是否存在于外部(即,已被提取)
我是stackoverflow的新手。对不起,如果这篇文章是多余的,但我还没有找到答案。另外,我对 Python 还很陌生。如果 tar 文件所在的根目录中不存在文件,我想从 tar 文件中提取文件。我尝试了很多版本。我认为下面的代码中有一些冗余,它没有做我需要的事情。它只是不断提取和覆盖现有文件。
需要解压的文件总是以“_B7.TIF”结尾。代码当前采用一个参数 - 包含 tar 文件的目录的完整路径。
这是另一个似乎没有做任何事情的版本。我试图简化...
谢谢你们的意见/建议。他们都以某种方式提供了帮助。这段代码对我有用。
对样式/冗余/使其更好的方法有什么想法吗?托马斯,你的代码不能直接开箱即用。我认为这是 tarfile.open 组件。可能需要 tarfile.open(os.path.join(directory, archive))。我只是在修改上述内容后才想到这一点。没有测试过。再次感谢。
python - python 2.4版中tarfile模块的“extractall()”替代方案
extractall()
来自 Python v2.4 中不存在的 tarfile 模块你能建议任何替代方法来在 Python v2.4 中提取 tarfile 吗?
c++ - c / c +代码无需打开即可知道tar文件的内容
我必须将 tar 文件内容加载到缓冲区中(通过创建一个流),然后我必须将我感兴趣的文件存储在缓冲区中(我假设有很多文件并且我是一个 .html 文件有兴趣存储在缓冲区中),我曾考虑只将这个特定的 .html 文件的内容存储在缓冲区中。
然后仅在缓冲区中存储该 .html 文件的内容后,我将显示该缓冲区,该缓冲区将向我显示 html 文件(这与解压缩该 .html 文件所在的 tar 文件完全相同的 .html 文件被储存了。)
现在是否存在任何机制来知道 .html 文件存在于该特定位置,以便我将我的 biffer 设置在该特定索引处并仅存储完整的 .html 文件。
python - What is expected behviour of tarfile.add() when adding archive to itself?
The question might sound strange because I know I enforce a strange situation> It came up by accident (a bug one might say) and I even know hot to avoid it, so please skip that part.
I would really like to understand the behaviour I see.
The point of the function is to add all files with a given prefix in a directory to an archive. I noticed that even despite a "bug", the program works correctly (sic!). I wanted to understand why.
The code is fairly simple so I allow myself to post whole function:
As one can notice I create the archive with the prefix
, and then I create a list of files to pack by by listing everything in cwd
and filter it via the lambda. Naturally the archive passes the filter. There is also a snippet to add fixed files if the names do not overlap, although it is not important I think.
So the output from such run is e.g:
So the script tried adding itself, however it does not appear in the final contents. I do not know what is the expected behaviour, but there is no warning at all and the documentation does not mention anything. I read the parts about methods to add members and used search for itself
and same name
.
I would assume it is automatically skipped, but I don't know how to acutally check it. I would personally expect to add a zero length file as member, however I understand skipping as I makes more sense actually.
Question Is it a desired behaviour in tarfile.add()
to ignore adding the archive to itself? Where is it said?