国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現(xiàn)拷貝/刪除文件夾的方法詳解

2020-01-04 14:37:35
字體:
供稿:網(wǎng)友

本文實例講述了Python實現(xiàn)拷貝 刪除文件夾的方法。分享給大家供大家參考,具體如下:

1. 拷貝文件夾

from shutil import copytree, ignore_patternscopytree(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-8import osimport os.pathimport statimport shutilclass 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)  #更改權(quán)限(win7會出現(xiàn)權(quá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): ''' 刪除出錯處理 ''' #更改權(quán)限(win7會出現(xiàn)權(quá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 osimport shutil# 設(shè)置待備份的源文件夾及存放備份文件的目標文件夾srcDir = "f://src"dstDir = "f://dst"# 目錄遞歸拷貝函數(shù)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:      # 是文件夾則遞歸調(diào)用本拷貝函數(shù),否則直接拷貝文件      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# 備份函數(shù)def dir_backup():  global srcDir  global dstDir  print "源文件夾" + srcDir  print "目標文件夾" + dstDir  print "本次拷貝文件:"  dir_copyTree(srcDir, dstDir)  # 將此句注釋則會一閃而過,方便自動備份  raw_input ("備份完成")# 執(zhí)行備份函數(shù)dir_backup()#####################################################

結(jié)合Windows的任務(wù)計劃程序定時運行此腳本,即可實現(xiàn)自動備份的目的。

python 文件夾復(fù)制加強版

shutil模塊主要用于文件夾的操作。其中copytree用來對文件夾進行復(fù)制,但是比較遺憾的是,如果目標文件已經(jīng)存在的話,該函數(shù)就會報錯拋異常了,非常地不給力。求人不如求已,看到幫助文檔中有此方法的源碼,就修改了一下,使其默認可以支持文件和文件夾的覆蓋。

import osimport os.pathimport shutildef 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程序設(shè)計有所幫助。


注:相關(guān)教程知識閱讀請移步到python教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 景泰县| 沙湾县| 河北区| 台东县| 莲花县| 芷江| 巴林右旗| 白沙| 兰州市| 灵石县| 遂平县| 福贡县| 法库县| 朝阳区| 祁阳县| 邵东县| 昌乐县| 克东县| 淳化县| 武冈市| 囊谦县| 五华县| 赤水市| 平阳县| 高要市| 安西县| 荥阳市| 澄城县| 甘泉县| 丰宁| 林芝县| 商洛市| 阿克苏市| 青河县| 花垣县| 旅游| 上饶县| 曲靖市| 南通市| 安化县| 临颍县|