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

问题描述 投票:1回答:4

我希望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'
python unzip
4个回答
1
投票

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

请参见文档中有关ZipFile.extractall的注释

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

[可能是在路径之外创建文件,例如成员具有以“ /”开头的绝对文件名或以两个开头的文件名点“ ..”

在2.7.4版中进行了更改:zipfile模块尝试阻止这种情况。请参阅extract()注意。


1
投票

在第一部分中,您正在创建一个包含来自prevdata的base 64解码值的顺序文件。由于它可能(应包含?)包含二进制数据,因此以二进制文件open(...,"wb")的形式打开文件[necessary,可以避免\n(0x0A,0x0D)中所有\r\n(0x0A)字符的转换。 ...并且如果Python无法解压缩文件,则应控制常规的zip程序是否可以。如果不是,则表示该文件已在上一步中被损坏。我给您带来了一个可能的问题,但是由于您没有说出prevdata的来源,我无法猜测更多。


0
投票
代替

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()
© www.soinside.com 2019 - 2024. All rights reserved.