Python: 压缩目录中的所有文件夹
Python: zip all folders in directory
如果我知道目录的路径,如何单独压缩其中的所有文件夹?我尝试了一些东西,但由于我不完全了解 os 模块的工作原理,所以我无能为力。
import os, zipfile
directory_path = str(raw_input())
for folder in os.listdir(directory_path):
zip_file = zipfile.ZipFile(folder + '.zip', 'w')
for root, dirs, files in os.walk(directory_path+'/'+folder):
for file in files:
zip_file.write(os.path.join(root, file),file)
zip_file.close()
问题是它只从目录中压缩一个文件夹。
示例:
Directory
|
+-- folder1
| |
| \-- file 1.1
|
+-- folder2
| |
| \-- file 2.1
|
+-- folder3
| |
| +-- file 3.1
| \-- file 3.2
我要获取的是folder1.zip(包含文件1.1),folder2.zip(包含文件2.1)和folder2.zip(包含文件3.1和文件3.2
感谢任何帮助。
我认为问题在于您为 zip 存档中的每个文件指定了不同的 arcname
(write
方法的第二个参数)。尝试以下操作(我还替换了一些代码,例如使用 os.path
模块而不是字符串连接的路径连接):
import os
import zipfile
path = raw_input('Enter the directory: ')
path = os.path.abspath(os.path.normpath(os.path.expanduser(path)))
for folder in os.listdir(path):
zipf = zipfile.ZipFile('{0}.zip'.format(os.path.join(path, folder)), 'w', zipfile.ZIP_DEFLATED)
for root, dirs, files in os.walk(os.path.join(path, folder)):
for filename in files:
zipf.write(os.path.abspath(os.path.join(root, filename)), arcname=filename)
zipf.close()
如果我知道目录的路径,如何单独压缩其中的所有文件夹?我尝试了一些东西,但由于我不完全了解 os 模块的工作原理,所以我无能为力。
import os, zipfile
directory_path = str(raw_input())
for folder in os.listdir(directory_path):
zip_file = zipfile.ZipFile(folder + '.zip', 'w')
for root, dirs, files in os.walk(directory_path+'/'+folder):
for file in files:
zip_file.write(os.path.join(root, file),file)
zip_file.close()
问题是它只从目录中压缩一个文件夹。
示例:
Directory
|
+-- folder1
| |
| \-- file 1.1
|
+-- folder2
| |
| \-- file 2.1
|
+-- folder3
| |
| +-- file 3.1
| \-- file 3.2
我要获取的是folder1.zip(包含文件1.1),folder2.zip(包含文件2.1)和folder2.zip(包含文件3.1和文件3.2
感谢任何帮助。
我认为问题在于您为 zip 存档中的每个文件指定了不同的 arcname
(write
方法的第二个参数)。尝试以下操作(我还替换了一些代码,例如使用 os.path
模块而不是字符串连接的路径连接):
import os
import zipfile
path = raw_input('Enter the directory: ')
path = os.path.abspath(os.path.normpath(os.path.expanduser(path)))
for folder in os.listdir(path):
zipf = zipfile.ZipFile('{0}.zip'.format(os.path.join(path, folder)), 'w', zipfile.ZIP_DEFLATED)
for root, dirs, files in os.walk(os.path.join(path, folder)):
for filename in files:
zipf.write(os.path.abspath(os.path.join(root, filename)), arcname=filename)
zipf.close()