相关疑难解决方法(0)

我想通过(Python)创建一个解压缩(.tar.gz)文件的脚本

我正在尝试制作一个脚本,用于从一个目录中的文件夹中解压缩所有.tar.gz文件.例如,我将调用一个文件(testing.tar.gz).然后如果我手动操作,我可以按"提取",然后.tar.gz文件将创建一个新文件,并调用testing.tar.最后,如果我重复按"提取此处"的过程,.tar文件会将所有.pdf文件生成.

我想知道我怎么能这样做,而且我的代码在这里,似乎并不是现实的工作.

import os
import tarfile
import zipfile

def extract_file(path, to_directory='.'):
    if path.endswith('.zip'):
        opener, mode = zipfile.ZipFile, 'r'
    elif path.endswith('.tar.gz') or path.endswith('.tgz'):
        opener, mode = tarfile.open, 'r:gz'
    elif path.endswith('.tar.bz2') or path.endswith('.tbz'):
        opener, mode = tarfile.open, 'r:bz2'
    else: 
        raise ValueError, "Could not extract `%s` as no appropriate extractor is found" % path

    cwd = os.getcwd()
    os.chdir(to_directory)

    try:
        file = opener(path, mode)
        try: file.extractall()
        finally: file.close()
    finally:
        os.chdir(cwd)
Run Code Online (Sandbox Code Playgroud)

python gzip unzip tar

37
推荐指数
3
解决办法
6万
查看次数

如何在Zip文件中找到中央目录的位置?

我试图在Zip文件中找到第一个中央目录文件头的位置.

我正在读这些:http: //en.wikipedia.org/wiki/Zip_(file_format) http://www.pkware.com/documents/casestudies/APPNOTE.TXT

在我看来,我只能扫描Zip数据,通过标题识别我所在的部分,然后执行此操作,直到我点击中央目录标题.我显然会在此之前阅读文件头并使用"压缩大小"来跳过实际数据,而不是循环遍历文件中的每个字节...

如果我这样做,那么我几乎已经知道Zip文件中的所有文件和文件夹,在这种情况下我不再看到中央目录的用处.

据我所知,中央目录的目的是列出文件元数据,以及Zip文件中实际数据的位置,这样您就不需要扫描整个文件了?

在阅读了关于中央目录结束记录之后,维基百科说:

这种排序允许在一次传递中创建一个zip文件,但通常通过首先读取最后的中心目录来解压缩.

如何轻松找到中央目录结束记录?我们需要记住它可以有一个任意大小的注释,所以我可能不知道它所在的数据流末尾有多少字节.我只是扫描一下吗?

PS我正在写一个Zip文件阅读器.

format zip

10
推荐指数
2
解决办法
5492
查看次数

zipfile无法处理某些类型的zip数据?

我在尝试解压缩zip文件时遇到了这个问题.

- zipfile.is_zipfile(my_file)总是返回False,即使UNIX命令解压缩处理它也没问题.此外,在尝试时,zipfile.ZipFile(path/file_handle_to_path)我得到相同的错误

- 该file命令返回Zip archive data, at least v2.0 to extract并使用less它显示的文件:

PKZIP for iSeries by PKWARE Length Method Size Cmpr Date Time CRC-32 Name 2113482674 Defl:S 204502989 90% 2010-11-01 08:39 2cee662e myfile.txt 2113482674 204502989 90% 1 file

任何想法如何解决这个问题?如果我可以进行python的zipfile工作会很好,因为我已经有一些单元测试,如果我将切换到运行,我将不得不放弃subprocess.call("unzip")

python zipfile

8
推荐指数
2
解决办法
8093
查看次数

为什么python不能执行通过stdin传递的zip存档?

我有一个包含__main__.py文件的zip存档:archive.zip

我可以执行它

python archive.zip
=> OK !
Run Code Online (Sandbox Code Playgroud)

但没有

cat archive.zip | python
=> File "<stdin>", line 1
SyntaxError: Non-ASCII character '\x9e' in file <stdin> on line 2,
but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
Run Code Online (Sandbox Code Playgroud)

为什么两种模式之间存在差异?有没有办法让管道在没有解压缩到python之外的情况下工作?

我通过网络收到这个存档,并希望我收到它后尽快执行它,所以我认为将zip管道输入python会起作用!

python compression zip python-2.6

3
推荐指数
1
解决办法
1047
查看次数

标签 统计

python ×3

zip ×2

compression ×1

format ×1

gzip ×1

python-2.6 ×1

tar ×1

unzip ×1

zipfile ×1