Python 将.txt文件从.tar.gz文件复制到其他目录

Python 将.txt文件从.tar.gz文件复制到其他目录,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,我正在尝试从压缩文件复制所有.txt文件(此文件具有未知的\u名称\u文件夹): .txt文件位置-->我的路径/?未知\u名称\u文件夹?/file.txt 我想做-->我的路径/file.txt 我编写了这段代码,但我有一个错误:EOFError:压缩文件在到达流结束标记之前结束。有什么想法吗 file=my_path+"/"+fil if file.endswith('.tar.gz'): tarf = tarfile.open(file, "r:gz") for inf

我正在尝试从压缩文件复制所有.txt文件(此文件具有未知的\u名称\u文件夹): .txt文件位置-->我的路径/?未知\u名称\u文件夹?/file.txt 我想做-->我的路径/file.txt

我编写了这段代码,但我有一个错误:EOFError:压缩文件在到达流结束标记之前结束。有什么想法吗

file=my_path+"/"+fil
if file.endswith('.tar.gz'):

    tarf = tarfile.open(file, "r:gz")
    for info in tarf:

        if info.name.endswith('.txt'):
            print(info.name)

            tar = tarfile.open(file) #extracting
            tar.extractall()
            tar.close()    
            code=os.system('cp ' + my_path+'/'+info.name +' '+ file)

正如Paulo提到的,您在第二次打开tar文件时错过了“gz”标志。另外,您复制文件的目标是原始tarball-我假设您希望它位于一个单独的目录中(“此处为targetdir”)

您只需要提取一次内容,因此代码变成:

file=my_path+"/"+fil
targdir='dest'
if file.endswith('.tar.gz'):

    tarf = tarfile.open(file, "r:gz")
    tarf.extractall()
    for info in tarf:

        if info.name.endswith('.txt'):
            print(info.name)
            code=os.system('cp ' + info.name +' '+ targdir)

(编辑-您不需要“cp”命令中的“mypath”-您已将tarball提取到当前目录中,因此“info.name!是文件的完整路径)

提取时您不需要“gz”标志吗?您还可以查看包含许多shell实用程序的shutil库,包括复制文件。因此添加“from shutil import copy2”然后用“copy2(info.name,targdir)”复制文件