我希望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 2.7.4之前-文件可能会提取到指定路径之外。
请参见文档中有关ZipFile.extractall的注释
https://docs.python.org/2/library/zipfile.html#zipfile.ZipFile.extract
[可能是在路径之外创建文件,例如成员具有以“ /”开头的绝对文件名或以两个开头的文件名点“ ..”
在2.7.4版中进行了更改:zipfile模块尝试阻止这种情况。请参阅extract()注意。
在第一部分中,您正在创建一个包含来自prevdata的base 64解码值的顺序文件。由于它可能(应包含?)包含二进制数据,因此以二进制文件open(...,"wb")
的形式打开文件[necessary,可以避免\n
(0x0A,0x0D)中所有\r\n
(0x0A)字符的转换。 ...并且如果Python无法解压缩文件,则应控制常规的zip程序是否可以。如果不是,则表示该文件已在上一步中被损坏。我给您带来了一个可能的问题,但是由于您没有说出prevdata的来源,我无法猜测更多。
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()