您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關怎么使用Python實現拷貝/刪除文件夾,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
1. 拷貝文件夾
from shutil import copytree, ignore_patterns copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
注:shutil.copytree
實現
def copytree(src, dst, symlinks=False, ignore=None): names = os.listdir(src) if ignore is not None: ignored_names = ignore(src, names) else: ignored_names = set() os.makedirs(dst) errors = [] for name in names: if name in ignored_names: continue srcname = os.path.join(src, name) dstname = os.path.join(dst, name) try: if symlinks and os.path.islink(srcname): linkto = os.readlink(srcname) os.symlink(linkto, dstname) elif os.path.isdir(srcname): copytree(srcname, dstname, symlinks, ignore) else: copy2(srcname, dstname) # XXX What about devices, sockets etc.? except (IOError, os.error) as why: errors.append((srcname, dstname, str(why))) # catch the Error from the recursive copytree so that we can # continue with other files except Error as err: errors.extend(err.args[0]) try: copystat(src, dst) except WindowsError: # can't copy file access times on Windows pass except OSError as why: errors.extend((src, dst, str(why))) if errors: raise Error(errors)
2. 刪除文件夾
#! /usr/bash/python # encoding:utf-8 import os import os.path import stat import shutil class DelDir: ''' 刪除指定根目錄下特定文件夾 ''' def __init__(self, root, dirname): self.root = root self.dirname = dirname def run(self): for r, dirs, files in os.walk(self.root): if self.dirname in dirs: srcDir = os.path.join(r, self.dirname) #更改權限(win7會出現權限問題) os.chmod(srcDir, stat.S_IREAD | stat.S_IWRITE) result = shutil.rmtree(srcDir, False, self.__handler) print "%s" %(srcDir) def __handler(self, function, path, excinfo): ''' 刪除出錯處理 ''' #更改權限(win7會出現權限問題) os.chmod(path, stat.S_IREAD | stat.S_IWRITE) function(path) print "[Handler] ==> Path:%s \n\tHandler the Error: %s" %(path, excinfo) if __name__ == '__main__': rootdir = r"E:\workspace\minioffice\mini-core\src\main\webapp" # 需要處理的文件夾 rootdir = unicode(rootdir, "utf8") dirname = ".svn" # 刪除的文件夾 c = DelDir(rootdir, dirname) c.run()
Python實現文件夾遞歸拷貝
目標:
1.多層文件夾嵌套,在要備份的文件夾中嵌套多個文件夾
2.增量備份,因為文件較多,且之前已有部分備份,所以只需對新增的文件進行備份,提升效率
Python安裝:
1.下載安裝包,http://www.python.org/getit/,可以選擇Python2或3,2的兼容性更好
2.添加Python安裝目錄如D:\Program\Python到環境變量Path中
編寫腳本:
Python中自身有文件夾拷貝的API,但有諸多限制,不能滿足需求,所以自己實現
要點有兩個:
1.遞歸拷貝,因為有多層嵌套文件夾,所以用遞歸實現
2.錯誤處理,要考慮文件夾不存在的情況
腳本如下:
###################################################### -*- coding: GBK -*- # 文件自動備份腳本 # 作者:阿凡提 import os import shutil # 設置待備份的源文件夾及存放備份文件的目標文件夾 srcDir = "f:\\src" dstDir = "f:\\dst" # 目錄遞歸拷貝函數 def dir_copyTree(src, dst): names = os.listdir(src) # 目標文件夾不存在,則新建 if not os.path.exists(dst): os.mkdir(dst) # 遍歷源文件夾中的文件與文件夾 for name in names: srcname = os.path.join(src, name) dstname = os.path.join(dst, name) try: # 是文件夾則遞歸調用本拷貝函數,否則直接拷貝文件 if os.path.isdir(srcname): dir_copyTree(srcname, dstname) else: if (not os.path.exists(dstname) or ((os.path.exists(dstname)) and (os.path.getsize(dstname) != os.path.getsize(srcname)))): print dstname shutil.copy2(srcname, dst) except: error.traceback(); raise # 備份函數 def dir_backup(): global srcDir global dstDir print "源文件夾" + srcDir print "目標文件夾" + dstDir print "本次拷貝文件:" dir_copyTree(srcDir, dstDir) # 將此句注釋則會一閃而過,方便自動備份 raw_input ("備份完成") # 執行備份函數 dir_backup() #####################################################
結合Windows的任務計劃程序定時運行此腳本,即可實現自動備份的目的。
python 文件夾復制加強版
shutil模塊主要用于文件夾的操作。其中copytree用來對文件夾進行復制,但是比較遺憾的是,如果目標文件已經存在的話,該函數就會報錯拋異常了,非常地不給力。求人不如求已,看到幫助文檔中有此方法的源碼,就修改了一下,使其默認可以支持文件和文件夾的覆蓋。
import os import os.path import shutil def copytree(src, dst, symlinks=False): names = os.listdir(src) if not os.path.isdir(dst): os.makedirs(dst) errors = [] for name in names: srcname = os.path.join(src, name) dstname = os.path.join(dst, name) try: if symlinks and os.path.islink(srcname): linkto = os.readlink(srcname) os.symlink(linkto, dstname) elif os.path.isdir(srcname): copytree(srcname, dstname, symlinks) else: if os.path.isdir(dstname): os.rmdir(dstname) elif os.path.isfile(dstname): os.remove(dstname) shutil.copy2(srcname, dstname) # XXX What about devices, sockets etc.? except (IOError, os.error) as why: errors.append((srcname, dstname, str(why))) # catch the Error from the recursive copytree so that we can # continue with other files except OSError as err: errors.extend(err.args[0]) try: copystat(src, dst) except WindowsError: # can't copy file access times on Windows pass except OSError as why: errors.extend((src, dst, str(why))) if errors: raise Error(errors) if __name__ == '__main__': copytree('E:/book', 'E:/newbook')
關于“怎么使用Python實現拷貝/刪除文件夾”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。