大佬教程收集整理的这篇文章主要介绍了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,请注明来意。