我正在使用python中的一个项目,我只需要提取tar存档的子文件夹而不是所有文件.我试着用
tar = tarfile.open(tarfile)
tar.extract("dirname", targetdir)
Run Code Online (Sandbox Code Playgroud)
但这不起作用,它不提取给定的子目录也没有抛出异常.我是python的初学者.另外如果上面的函数对目录不起作用,那么这个命令和tar.extractfile()之间的区别是什么?
tal*_*nat 14
在tarfile模块文档的第二个示例的基础上,您可以使用以下内容提取包含的子文件夹及其所有内容:
with tarfile.open("sample.tar") as tar:
subdir_and_files = [
tarinfo for tarinfo in tar.getmembers()
if tarinfo.name.startswith("subfolder/")
]
tar.extractall(members=subdir_and_files)
Run Code Online (Sandbox Code Playgroud)
这将创建子文件夹及其内容的列表,然后使用推荐的extractall()方法仅提取它们.当然,替换"subfolder/"为要提取的子文件夹的实际路径(相对于tar文件的根目录).
另一个答案将保留子文件夹路径,这意味着subfolder/a/b将被提取到./subfolder/a/b.要将子文件夹提取到根,所以subfolder/a/b将被提取到./a/b,您可以使用以下内容重写路径:
def members(tf):
l = len("subfolder/")
for member in tf.getmembers():
if member.path.startswith("subfolder/"):
member.path = member.path[l:]
yield member
with tarfile.open("sample.tar") as tar:
tar.extractall(members=members(tar))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8670 次 |
| 最近记录: |