我有一个程序可以压缩文件夹中的所有内容。我没有编写这段代码,但我在网上的某个地方找到了它,我正在使用它。我打算压缩一个文件夹,例如 C:/folder1/folder2/folder3/ 。我想将文件夹 3 及其所有内容压缩到一个文件中,比如文件夹 3.zip。使用下面的代码,一旦我压缩它,folder3.zip 的内容将是 folder1/folder2/folder3/and files。我不希望整个路径被压缩,我只希望我对压缩感兴趣的子文件夹(在本例中为文件夹 3)。我尝试了一些 os.chdir 等,但没有运气。
def makeArchive(fileList, archive):
"""
'fileList' is a list of file names - full path each name
'archive' is the file name for the archive with a full path
"""
try:
a = zipfile.ZipFile(archive, 'w', zipfile.ZIP_DEFLATED)
for f in fileList:
print "archiving file %s" % (f)
a.write(f)
a.close()
return True
except: return False
def dirEntries(dir_name, subdir, *args):
# Creates a list of all files in the folder
'''Return a list of file names found in directory 'dir_name'
If 'subdir' is True, recursively access subdirectories under 'dir_name'.
Additional arguments, if any, are file extensions to match filenames. Matched
file names are added to the list.
If there are no additional arguments, all files found in the directory are
added to the list.
Example usage: fileList = dirEntries(r'H:\TEMP', False, 'txt', 'py')
Only files with 'txt' and 'py' extensions will be added to the list.
Example usage: fileList = dirEntries(r'H:\TEMP', True)
All files and all the files in subdirectories under H:\TEMP will be added
to the list. '''
fileList = []
for file in os.listdir(dir_name):
dirfile = os.path.join(dir_name, file)
if os.path.isfile(dirfile):
if not args:
fileList.append(dirfile)
else:
if os.path.splitext(dirfile)[1][1:] in args:
fileList.append(dirfile)
# recursively access file names in subdirectories
elif os.path.isdir(dirfile) and subdir:
print "Accessing directory:", dirfile
fileList.extend(dirEntries(dirfile, subdir, *args))
return fileList
您可以通过 调用它makeArchive(dirEntries(folder, True), zipname)
。
关于如何解决这个问题的任何想法?我正在使用 Windows 操作系统和 python 25,我知道在 python 2.7 中有 shutil make_archive 有帮助,但由于我正在使用 2.5,我需要另一个解决方案:-/