1. 程式人生 > >Python 3.x (2) :檔案,目錄和路徑

Python 3.x (2) :檔案,目錄和路徑

import  os
import  shutil
import  datetime

''' 
作用:將目錄備份到其他路徑。
實際效果:
假設給定目錄"/media/data/programmer/project/python" ,
備份路徑"/home/diegoyun/backup/“ ,
則會將python目錄備份到備份路徑下,形如:
/home/diegoyun/backup/yyyymmddHHMMSS/python/xxx/yyy/zzz..

用法:更改這兩個引數.
backdir:備份目的地.
copydirs:想要備份的資料夾.
''' def  mainLogic():
    
 # add dirs you want to copy     backdir
 = " d://test "  print (backdir)

    copydirs
 = []
    copydirs.append(
 " d://temp " );
    
 # copydirs.append("d://test");  print ( " Copying files  =================== " )
    start
 = datetime.datetime.now()

    
 # gen a data folder for backup     backdir = os.path.join(backdir,start.strftime( " %Y-%m-%d " ))
    
 # print("backdir is:"+backdir) 
    
    kc
 = 0
    
 for  d  in  copydirs:
        kc
 = kc + copyFiles(d,backdir)

    end
 = datetime.datetime.now()
    
 print ( " Finished! =================== " )
    
 print ( " Total files :  "  +  str(kc) )
    
 print ( " Elapsed time :  "  +  str((end - start).seconds) +
 "  seconds " )

def  copyFiles(copydir,backdir):
    prefix
 = getPathPrefix(copydir)
    
 # print("prefix is:"+prefix )    
    i
 = 0
    
 for  dirpath,dirnames,filenames  in  os.walk(copydir):
        
 for  name  in  filenames:
            oldpath
 = os.path.join(dirpath,name)
            newpath
 = omitPrefix(dirpath,prefix)
            
 print ( " backdir is: " + backdir )           
            newpath
 = os.path.join(backdir,newpath)
            
 print ( " newpath is: " + newpath)

            
 if  os.path.exists(newpath) != True:
                os.makedirs(newpath)  
            newpath
 = os.path.join(newpath,name)
            
 print ( " From: " + oldpath + "  to: " + newpath)
            shutil.copyfile(oldpath,newpath)
            i
 = i + 1  return  i    

def  getPathPrefix(fullpath):
    
 # Giving /media/data/programmer/project/ , get the prefix  # /media/data/programmer/     l = fullpath.split(os.path.sep)
    
 # print(str(l[-1]=="")      if  l[ - 1 ] == "" :
        tmp
 = l[ - 2 ]
    
 else :
        tmp
 = l[ - 1 ]
    
 return  fullpath[0:len(fullpath) - len(tmp) - 1 ]

def  omitPrefix(fullpath,prefix):
    
 # Giving /media/data/programmer/project/python/tutotial/file/test.py ,  # and prefix is Giving /media/data/programmer/project/,  # return path as python/tutotial/file/test.py  return  fullpath[len(prefix) + 1 :]

mainLogic()