
4.3 文件和路径操作
本节介绍几个与文件和路径相关的操作,包括文件的复制、删除,路径的创建、删除和查询等操作,这些方法在os和shutil模块中,使用前先用import os和import shutil语句把模块导入进来。os模块和shutil模块的常用方法如表4-3所示。下面介绍一些常用的文件和路径操作的方法。
表4-3 文件和路径操作常用方法

1.工作路径的查询和修改
工作路径是指Python用import语句导入模块或包时首先要搜索的路径,在IDLE的文件编程环境中编写好程序,存盘并运行后,此时的存盘路径将成为工作路径。Python用os.getcwd()方法可以获取工作路径(current working directory,cwd),用os.chdir()方法可以设置工作路径(change directory)。

2.获取指定路径下的文件和路径
用os.listdir()方法可以得到某路径下的文件和文件夹,返回值是字符串列表。用os.listdir(".")或os.listdir()方法得到工作路径下的文件和文件夹,用os.listdir("..")方法获得工作路径的上级路径下文件和文件夹。

3.删除文件
用os.remove()方法可以删除文件,删除前应确保有删除权限,否则抛出PermissionError异常。

4.删除目录
用os.rmdir()方法可以删除空路径,如果路径不存在或非空,分别抛出FileNotFoundError和OSError异常。用os.removedirs()方法也可以删除空路径,且如果删除该路径后父路径为空,则递归删除父路径。

5.创建路径
用os.mkdir()方法可以创建一个路径,用os.makedirs()方法可以创建多级路径。

6.复制文件和文件夹
复制文件可以用shutil模块的shutil.copy()或shutil.copyfile()方法。

复制文件夹下的所有文件和所有文件夹到新文件夹可以用shutil.copytree()方法,要求新文件夹不能提前存在。

7.判断文件或路径是否存在
判断文件是否存在可以用os.path.isfile()方法,判断路径是否存在可以用os.path. isdir()方法或os.path.exists()方法,判断是否是绝对路径可以用os.path.isabs()方法。

8.文件和文件夹的重命名
用os.rename()方法可以给文件和文件夹重命名,重命名时需要注意文件或文件夹是否可以改名,如果一个文件或文件夹正在被使用或打开,则不允许改名。

9.文件名和路径的分离
用os.path.split()方法可以分离路径和文件名,用os.path.splitext()方法可以将文件名(含路径)与文件扩展名分离,用os.path.dirname()方法可以得到路径,用os.path. basename()方法可以得到文件名。

10.系统的分隔符、系统名称
用os.linesep属性给出当前平台使用的行终止符,Windows使用'\r\n',Linux使用'\n',而Mac使用'\r'。os.name给出正在使用的平台,Windows是'nt',而Linux/UNIX是'posix'。os.sep给出文件路径分隔符。

11.获取文件的大小和状态
用os.path.getsize(path)方法可以返回路径的大小,用os.stat(file)方法可以获取文件的状态。

12.路径的拼接和公共路径的查找
用os.join()方法可以把两个路径拼接成一个路径,用os.path.commonprefix()方法可以找出路径的公共部分,用os.path.commonpath()方法可以找出公共路径。

13.遍历路径
遍历路径是指将指定目录下的全部目录(包括子目录)及文件运行一遍,os模块的walk()方法用于实现遍历目录的功能,walk()方法的格式为walk(top,topdown=True,onerror=None,followlinks=False)。下面的代码输出"d:\\pic"路径下的所有路径和文件。
