我从网上得到了下面的代码,我正在尝试添加一个密码,我想将结果目录更改为"C:#SFTPDWN“(最终的Zip文件应该在这个文件夹中)。
我试着像下面这样改变它,它不起作用。
with ZipFile('CC-Data.zip', 'w', 'pass word') as zip:
谁能告诉我如何更改此代码以添加密码和更改结果文件夹?
最后一件事,目前它将压缩#SFTPDWN文件夹,我只想压缩里面的所有内容(现在它将创建两个文件夹(CC-Data.zip和里面的#SFTPDWN ))。谁能告诉我如何压缩#SFTPDWN文件夹中的所有内容?
代码
from zipfile import ZipFile
import os
def get_all_file_paths(directory):
file_paths = []
for root, directories, files in os.walk(directory):
for filename in files:
filepath = os.path.join(root, filename)
file_paths.append(filepath)
return file_paths
def main():
# path to folder which needs to be zipped
directory = 'C:\#SFTPDWN'
file_paths = get_all_file_paths(directory)
print('Following files will be zipped:')
for file_name in file_paths:
print(file_name)
with ZipFile('CC-Data.zip', 'w') as zip:
# writing each file one by one
for file in file_paths:
zip.write(file)
print('Zipped successfully!')
if __name__ == "__main__":
main()
发布于 2019-05-22 06:04:51
对于密码问题:来自文档:
此模块...支持对ZIP压缩文件中的加密文件进行解密,但目前不能创建加密文件。解密非常慢,因为它是用原生Python实现的,而不是用C实现的。
您需要使用第三方库来创建加密压缩包,或者以其他方式加密归档文件。
对于第二部分,在ZipFile.write
中,文档还提到:
ZipFile.write(filename, arcname=None, compress_type=None, compresslevel=None)
将名为filename
的文件写入归档文件,为其提供归档名称 filename
(默认情况下,这将与filename
相同,但没有驱动器号,并且删除了前导路径分隔符)。..。
注意:归档名称应该相对于归档根目录,即它们不能以路径分隔符开头。
因此,您需要去掉file
变量的任何前缀,并将其作为arcname
参数传递。使用os.path.relpath
可能会有帮助,例如(我在Linux上,但应该在Windows下使用Windows path):
>>> os.path.relpath("/folder/subpath/myfile.txt", "/folder/")
'subpath/myfile.txt'
侧边栏:像"C:\Something"
这样的路径是非法字符串,因为它有转义\S
。Python在某种程度上容忍了这一点(我认为在3.8中它会出错),并按字面意思重写它们。使用"C:\\Something"
、r"C:\Something"
或"C:/Something"
如果你尝试像"C:\Users"
这样的东西,它实际上会抛出一个错误,或者使用"C:\nothing"
它可能会默默地做一些奇怪的事情……
https://stackoverflow.com/questions/56246801
复制相似问题