压缩文件不会在Python中解压缩

时间:2015-07-09 15:36:42

标签: python unzip

我希望Python提取文件夹并将其解压缩到随机命名的文件夹中。 "随机"第一部分没有问题。但它不会在该文件夹中提取,我不知道为什么。这是我的代码:

    ...

    try:
    print "Trying to save file from " + str(clientaddr)
    rndstr=randomword(20)
    file1 = open("comp" + rndstr +".zip","w")
    file1.write(base64.b64decode(prevdata))
    file1.close()

    zfile = zipfile.ZipFile("comp" + rndstr +".zip")
    zfile.extractall("temp" + rndstr)

    file2 = open("temp" + rndstr + "/ac","r")
    #HERE IT GIVES AN ERROR THAT THE FILE DOESN'T EXIST. IN THE ZIP FILE TO EXTRACT, I AM ABSOLUTELY SURE THAT A FILE NAMED "ac" EXISTS... THE ENTIRE FOLDER REMAINS EMPTY...

    ...

当我没有指定输出文件夹时,它会提取... 我完全没有头绪。我几乎尝试了一切......

编辑:出现以下错误:

[Errno 2] No such file or directory: 'tempxarkbkfwkxxsiolxglok/ac'

4 个答案:

答案 0 :(得分:1)

在Python 2.7.4之前 - 文件可能被提取到指定的路径之外。

请参阅文档中的说明ZipFile.extractall

https://docs.python.org/2/library/zipfile.html#zipfile.ZipFile.extract

  

文件可能是在路径之外创建的,例如会员   具有以" /&#34开头的绝对文件名;或两个文件名   点" .."

     

版本2.7.4中更改:zipfile模块尝试阻止它。   请参阅extract()注释。

答案 1 :(得分:1)

在第一部分中,您正在创建一个包含来自prevdata的base 64解码值的顺序文件。因为它可以(应该?)包含二进制数据,所以将文件打开为二进制文件更好open(...,"wb")。在类似Unix的文本和二进制模式之间没有区别的系统上是无害的,并且在Windows上必要以避免{{1}中所有\n(0x0A)字符的转换}(0x0A,0x0D)...

如果Python无法解压缩文件,您应该控制常规zip程序是否可以。如果不是,则表示该文件在上一步中已损坏。我给了你一个可能的问题,但由于你没有说prevdata来自哪里,我猜不出更多。

答案 2 :(得分:0)

而不是

zfile = zipfile.ZipFile("comp" + rndstr +".zip")

我用过

zfile = zipfile.ZipFile("comp" + rndstr +".zip","r")

它有效。我认为这是与python 2.7.3相关的东西(2.7.4以下,并且有@kjp修改的zip错误)

答案 3 :(得分:0)

def extracter(file_name, extraction_path):
    """
    Common method to extract tar files parameter includes source directory and destination directory
    :param file_name:
    :param extraction_path:
    """
    if not file_name.exists():
        print("Oops, file doesn't exist!")
    else:
        if tarfile.is_tarfile(file_name):
            tf = tarfile.open(file_name, 'r:*')
            tf.extractall(extraction_path)
            tf.close()

使用源方法和目标方法调用该方法。它处理所有类型的tar文件。不需要额外的文件处理。