Python项目:将一个文件夹备份到一个 ZIP 文件

764 阅读2分钟

要求:

假定你正在做一个项目,它的文件保存在 C:\AlsPythonBook 文件夹中。你担心工作 会丢失,所以希望为整个文件夹创建一个 ZIP 文件,作为“快照”。你希望保存不同的版 本,希望 ZIP 文件的文件名每次创建时都有所变化。例如 AlsPythonBook_1.zip、 AlsPythonBook_2.zip、AlsPythonBook_3.zip,等等。你可以手工完成,但这有点烦人, 而且可能不小心弄错 ZIP 文件的编号。运行一个程序来完成这个烦人的任务会简单得多。 针对这个项目,打开一个新的文件编辑器窗口,将它保存为 backupToZip.py。

#! python3
#backupToZip.py - 将一个文件夹备份到一个ZIP文件
import zipfile , os

#弄清ZIP文件的名字
def backupToZip(folder):
    folder = os.path.abspath(folder) #返回参数的绝对路径的字符串
    number = 1
    while True:
        zipFilename = os.path.basename(folder) + '_' +str(number) + '.zip'
        #返回一个字符串包含folder参数中最后一个斜杠之前的所有内容
        if not os.path.exists(zipFilename):
            #如果zipFilename参数所指的文件或文件夹存在,将返回True,否则将返回False
            break
        number = number+1
#创建新ZIP文件
    print('creating %s...' %(zipFilename))
    backupZip =zipfile.ZipFile(zipFilename,'w')

#遍历目录树并添加到ZIP文件
    for foldername,subfolders,filenames in os.walk(folder):
        print('Adding files in %s...' % (foldername))
    #将当前文件夹添加到ZIP文件中
        backupZip.write(foldername)
#将此文件夹中的所有文件添加到ZIP文件中
        for filename in filenames:
            if filename.startswith(folder) and filename.endswith('.zip'):
                continue
            backupZip.write(os.path.join(foldername, filename))
    backupZip.close() 
    print('Done.')

backupToZip('D:\\练习\\日期文件')

os.path模块功能:

方法 功能
os.path.abspath(path) 返回绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.getatime(path )返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getctime(path) 返回path所指向的文件或者目录的创建时间
os.path.getsize(name) 获得文件大小,如果name是目录返回0L
os.path.join(path1[, path2[, …]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略.
os.path.splitext() 分离文件名与扩展名