Python實現(xiàn)拷貝/刪除文件夾的方法詳解
本文實例講述了Python實現(xiàn)拷貝 刪除文件夾的方法。分享給大家供大家參考,具體如下:
1. 拷貝文件夾
from shutil import copytree, ignore_patterns
copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
注:shutil.copytree實現(xiàn)
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會出現(xiàn)權限問題) 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會出現(xiàn)權限問題) 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實現(xiàn)文件夾遞歸拷貝
目標:
1.多層文件夾嵌套,在要備份的文件夾中嵌套多個文件夾
2.增量備份,因為文件較多,且之前已有部分備份,所以只需對新增的文件進行備份,提升效率
Python安裝:
1.下載安裝包,http://www.python.org/getit/,可以選擇Python2或3,2的兼容性更好
2.添加Python安裝目錄如D:\Program\Python到環(huán)境變量Path中
編寫腳本:
Python中自身有文件夾拷貝的API,但有諸多限制,不能滿足需求,所以自己實現(xiàn)
要點有兩個:
1.遞歸拷貝,因為有多層嵌套文件夾,所以用遞歸實現(xiàn)
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 ("備份完成")
# 執(zhí)行備份函數
dir_backup()
#####################################################
結合Windows的任務計劃程序定時運行此腳本,即可實現(xiàn)自動備份的目的。
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相關內容感興趣的讀者可查看本站專題:《Python文件與目錄操作技巧匯總》、《Python文本文件操作技巧匯總》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程》
希望本文所述對大家Python程序設計有所幫助。
相關文章
Centos Python2 升級到Python3的簡單實現(xiàn)
下面小編就為大家?guī)硪黄狢entos Python2 升級到Python3的簡單實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06
詳解OpenCV中直方圖,掩膜和直方圖均衡化的實現(xiàn)
這篇文章主要為大家詳細介紹了OpenCV中直方圖、掩膜、直方圖均衡化詳細介紹及代碼的實現(xiàn),文中的示例代碼講解詳細,需要的可以參考一下2022-11-11

