程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了python tarfile 中 tar --strip 的等效功能,用于随机命名的子文件夹大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决python tarfile 中 tar --Strip 的等效功能,用于随机命名的子文件夹?

开发过程中遇到python tarfile 中 tar --Strip 的等效功能,用于随机命名的子文件夹的问题如何解决?下面主要结合日常开发的经验,给出你关于python tarfile 中 tar --Strip 的等效功能,用于随机命名的子文件夹的解决方法建议,希望对你解决python tarfile 中 tar --Strip 的等效功能,用于随机命名的子文件夹有所启发或帮助;

我有几个具有以下目录结构的 tar 文件:a/b/c/xyz.txt

我想通过忽略父目录 'a' 从这些 tar 文件中提取文件。提取后,我期待以下目录结构:b/c/xyz.txt

使用 tar 命令,我们可以使用 --Strip=1 选项。

现在已经在 Equivalent functionality of tar --Strip in python tarfile 中询问了一个具有明确命名的目录 'a' 的 tar 文件,但我有一个额外的问题。

tarfile 'a' 的目录 'A' 被命名为 'projectname-1d30420',对于 tarfile 'B' 它是 'differentprojectname-ed1d5db' 等等 'C'{{ 1}}。

如何在 python 中使用 tarfile 来做到这一点?

解决方法

如果您有路径 a/b/c,那么您可以在第一个 / 处拆分它并获取最后一个元素以获取 b/c

path = path.split('/',1)[-1]

您甚至可以使用变量来获得与 --Strip

相同的结果
Strip = 1  # 2,3,etc.

path = path.split('/',Strip)[-1]

基于您链接中的代码,但我没有对其进行测试

def members(tar,Strip):
    for member in tar.getmembers():
        member.path = member.path.Strip('/',Strip)[-1]
        yield member

# --- main ---

Strip = 1

with tarfile.open("sample.tar") as tar:
    tar.extractall(members=members(tar,Strip))
,

我已经想通了。 tar.extractall 中的成员文件可以使用 pathlib 库剥离其提取路径,例如 @H_469_3@member.path = p.relative_to(*p.parts[:Strip]) 其中 p = Path(member.path)Strip 是剥离的文件夹数。

结果如下:

import tarfile
from pathlib import Path

def get_tar_members_Stripped(tar,n_folders_Stripped = 1):
    members = []
    for member in tar.getmembers():
        p = Path(member.path)
        member.path = p.relative_to(*p.parts[:n_folders_Stripped])
        members.append(member)
    return members

# --- main ---

Strip = 1

with tarfile.open(tarfile_path,'r') as tar:
 tar.extractall(members=get_tar_members_Stripped(tar,Strip))

大佬总结

以上是大佬教程为你收集整理的python tarfile 中 tar --strip 的等效功能,用于随机命名的子文件夹全部内容,希望文章能够帮你解决python tarfile 中 tar --strip 的等效功能,用于随机命名的子文件夹所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:tar