gpt4 book ai didi

Python tar.add 文件但省略父目录

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:35 24 4
gpt4 key购买 nike

我正在尝试从存储在文本文件中的文件列表创建一个 tar 文件,我有创建 tar 的工作代码,但我希望从某个目录(应用程序和所有子目录)启动存档,并且删除父目录。这是由于该软件仅从某个目录打开文件。

package.list文件如下:

应用程序\myFile
应用程序\myDir\myFile
应用\myDir\myFile2

如果我省略了restore.add中的路径,由于我的程序从其他地方运行,它无法找到文件。如何告诉 tar 从特定目录开始,或者添加文件,但保持从文本文件获得的目录结构,例如从 app 开始,而不是所有父目录

我的目标是在 Windows 上使用 Python 执行此 tar cf Restore.tar -T package.list 操作。

我已经从这里尝试了basename:How to compress a tar file in a tar.gz without directory? ,这会删除所有目录。

我还尝试在 .add 方法中使用 arcname='app',但是这会破坏目录结构并将文件负载重命名为 app,从而产生一些奇怪的结果>

path = foo + '\\' + bar
file = open(path + '\\package.list', 'r')
restore = tarfile.open(path + '\\restore.tar', 'w')
for line in file:
restore.add(path + '\\' + line.strip())
restore.close()
file.close()

使用Python 2.7

最佳答案

您可以使用 TarFile.add 的第二个参数,它指定了存档内的名称。

因此,假设每条路径都是正常的,这样的事情就会起作用:

import tarfile
prefix = "some_dir/"
archive_path = "inside_dir/file.txt"
with tarfile.open("test.tar", "w") as tar:
tar.add(prefix+archive_path, archive_path)

用法:

> cat some_dir/inside_dir/file.txt
test
> python2 test_tar.py
> tar --list -f ./test.tar
inside_dir/file.txt

在生产中,我建议使用适当的模块进行路径处理,以确保每个斜杠和反斜杠都位于正确的位置。

关于Python tar.add 文件但省略父目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47177660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com