python cookbook 13.7 copy or move files and directories

#你想复制或移动文件和目录,但又不想调用shell命令。shutil模块有很便捷的函数可以复制文件和目录,用起来很简单。
import shutil
shutil.copy(src,dst)  #cp src dst
shutil.copy2(src,dst)  #cp -p src dst  连同属性一起复制
shutil.copytree(src,dst)  #cp -R src dst
shutil.move(src,dst)   #mv src dst
#若源文件是一个符号链接,那目标文件将会是符号链接指向的文件。若你只想复制符号链接本身,那需要制定关键字参数follow_stmlinks:
shutil.copytree(src,dst,symlinks=True)
#copytree()可以让你在复制过程中选择性的忽略某些文件或目录。你可以提供一个忽略函数,接受一个目录名和文件名列表作为输入,
#返回一个忽略的名称列表:
def ignore_pyc_files(dirname,filename):
    return [name in filename if name.endswith('.pyc')]
shutil.copytree(src,dst,ignore=ignore_pyc_files)
#由于忽略某种模式的文件名是很常见,因此一个便捷的函数ignore_patterns()已经包含在里面了:
shutil.copytree(src,dst,ignore=shutil.ignore_patterns('*-','*.pyc'))
#当处理文件名的时候,最好使用os.path中的函数来确保最大的可移植性:
filename='C:\\Users\\leidaguo\\Desktop\\FeatureExtraction\\test.py'
import os
print(os.path.basename(filename))
print(os.path.dirname(filename))
print(os.path.split(filename))
print(os.path.join('C:\\Users\\leidaguo\\Desktop',os.path.basename(filename)))
print(os.path.expanduser('-\\span.py'))
#使用copytree()复制文件夹的棘手问题是对于错误的处理。复制过程中函数可能会碰到损坏的符号链接,因为权限无法访问的问题等。
#为解决这个问题,所有碰到的问题会被手机到一个列表中并打包为一个单独的异常,到最后抛出
try:
    shutil.copytree(src,dst)  #若提供关键字参数 ignore_dangling_symlinks=True,这时copytree()会忽略无效链接
except shutil.Error as e:
    for src,dst,msg in e.args[0]:
        print(dst,src,msg)

 

Guess you like

Origin blog.csdn.net/qq_21997625/article/details/91361276