我希望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'
答案 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文件。不需要额外的文件处理。