【问题标题】:Copy .txt files from a .tar.gz file to other directory将 .txt 文件从 .tar.gz 文件复制到其他目录
【发布时间】:2018-04-11 07:57:12
【问题描述】:

我正在尝试从压缩文件中复制所有 .txt 文件(该文件有 unknown_name_folders): .txt 文件位置 ---> my_path/?unknown_name_folder?/file.txt 我想做---> my_path/file.txt

我执行了这段代码,但是我遇到了这个错误:EOFError: Compressed file ended before the end-of-stream marker was达到。有什么想法吗?

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)

【问题讨论】:

  • 提取时不需要'gz'标志吗?

标签: python python-3.x python-2.7


【解决方案1】:

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

只需要提取一次内容,所以代码变成:

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!是文件的完整路径)

【讨论】:

  • 您还可以查看shutil 库,其中包含许多shell 实用程序,包括复制文件。所以添加“from shutil import copy2”,然后用“copy2(info.name,targdir)”复制文件
猜你喜欢
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多