1. 程式人生 > >Python組織文件 實踐:將文件的不同版本備份為ZIP文件

Python組織文件 實踐:將文件的不同版本備份為ZIP文件

eat read names 壓縮 內容 ready python3 組織 pytho

功能:備份文件夾、能將文件的不同版本備份下來,並且每個有不同的名字

#! python3
# backupToZip.py - 備份文件的不同版本到壓縮文件中

import zipfile,os

#folder-指定需要備份的文件夾
def backupToZip(folder):
    #獲得絕對路徑,以後就使用這樣的方式來進行使用地址,不去上來就讓path=‘絕對地址’了
    folder=os.path.abspath(folder)
    #figure out the filename this code should based on what files already exist
    number=1
    while True:
        zipFilename=os.path.basename(folder)+‘_‘+str(number)+‘.zip‘
        if not os.path.exists(zipFilename): #判斷文件名是否存在
            break
        number+=1
    #create the ZIP file.
    print(‘Create %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:
            newBase=os.path.basename(folder)+‘_‘
            #不備份zip文件
            if filename.startswith(newBase) and filename.endswith(‘.zip‘):
                continue
            backupZip.write(os.path.join(foldername,filename))
    backupZip.close()
    print(‘Done‘)
path=r‘.\forTest\adb_backup‘
path=os.path.join(path)
backupToZip(path)

  

step1:弄清楚ZIP文件的文件名

  會按照文件的不同版本來創建名為backupFilename1、backupFilename2...這樣的規律遞增下去,怎麽確定應該創建的zip文件的名字呢?通過檢查某個文件名是否存在,如果存在,就按命名規律的下一個文件再檢查。。。

#檢查文件名是否存在
    number=1
    while True:
        zipFilename=os.path.basename(folder)+‘_‘+str(number)+‘.zip‘
        if not os.path.exists(zipFilename): #判斷文件名是否存在
            break
        number+=1

step2:創建壓縮文件

print(‘Create %s...‘ %(zipFilename))
backupZIp=zipfile.ZipFile(zipFilename,‘w‘)

step3:遍歷目錄樹並添加到ZIP文件 

 #遍歷目錄樹並添加到ZIP文件
    for foldername,subfolders,filenames in os.walk(folder):
        print(‘Adding files in %s...‘ %(foldername))
        #添加當前文件夾到ZIP文件
        backupZip.write(foldername)
    #添加所有文件到ZIP文件中
        for filename in filenames:
            newBase=os.path.basename(folder)+‘_‘
            #不備份zip文件
            if filename.startswith(newBase) and filename.endswith(‘.zip‘):
                continue
            backupZip.write(os.path.join(foldername,filename))

發現的問題:

  1)

backupZip.write(path)  #假如path是一個文件夾,那麽在壓縮文件中,只會出現這個文件夾,而裏面的內容,並不會被壓縮進去

  

  2)壓縮文件中包含很多層文件夾,會把要壓縮的文件夾的路徑又創建一次(未解決)

    我以為是 foldrname 的原因,因為 foldernameos.walk() 返回的當前文件夾的字符串,然後就隨便把 foldername 改了一下,運行提示

FileNotFoundError: [WinError 3] 系統找不到指定的路徑

  

  3)這個傳入的路徑到快把我搞暈了,我為了謹慎起見,一直都是用的絕對路徑,每次搞很長一個字符串,雖然沒有出現過問題,但分析程序運行結果的時候很是影響,我也不知道相路徑用上會不會出錯的,要趕緊試一下

  4) walk() 太強大了,他能全部遍歷,我中間竟然還擔心這個程序有不能壓縮下面的二級文件夾的缺陷

Python組織文件 實踐:將文件的不同版本備份為ZIP文件