以下内容参考自《Python爬虫开发与项目实战》。

在Python中对文件和目录的操作经常使用到os模块和shutil模块,常用的方法如下所示:

  • 获得当前Python脚本工作的目录路径:os.getcwd() 。e.g.
>>> os.getcwd()
'D:\\Code\\Python'
  • 获取文件/目录
  • 列举指定目录下的所有文件和目录名:os.listdir(path)
  • 分离路径的目录名和文件名:os.path.split(path)
  • 分离路径的文件名和扩展名:os.path.splitext(path)。e.g.
>>> os.path.split('D:\\Code\\Python\\a.py')
('D:\\Code\\Python', 'a.py')
>>> os.path.splitext('D:\\Code\\Python\\a.py')
('D:\\Code\\Python\\a', '.py')
  • 获取目录名:os.path.dirname(path)
  • 获取文件名:os.path.basename(path)。e.g.
>>> os.path.dirname('D:\\Code\\Python\\a.py')
'D:\\Code\\Python'
>>> os.path.basename('D:\\Code\\Python\\a.py')
'a.py'
  • 检验文件/目录
  • 检验路径是否为文件:os.path.isfile(path)
  • 检验路径是否为目录:os.path.isdir(path)
  • 检验路径是否为绝对路径:os.path.isabs()
  • 检验路径是否存在:os.path.exists()
  • 创建目录
  • 创建多级目录:os.makedirs(path)
  • 创建单个目录:os.mkdir(path)
  • 删除文件/目录
  • 删除一个文件:os.remove(path)
  • 删除多级目录:os.removedirs(path)。e.g.
    存在路径D:\Code\python\b\c,其中c为空目录,b目录下只有c,那么使用以下命令可以删除目录b和c:
>>> os.removedirs('D:\\Code\\Python\\b\\c')
  • 删除单个目录:os.rmdir(path)。e.g.
    参数使用以上的路径只能删除目录c,目录b并不会删除:
>>> os.rmdir('D:\\Code\\Python\\b\\c')
  • 删除单个目录:shutil.rmtree(path)。不管目录是否为空都可以删除。e.g.
    在上例中,即使目录b下还存在目录c,也可以使用以下命令删除目录b(当然目录c也会一同被删除):
>>> shutil.rmtree('D:\\Code\\Python\\b')
  • 复制文件/目录:
  • 复制目录:shutil.copytree(old_path, new_path)old_pathnew_path都只能是目录,而且new_path必须不存在。
  • 复制文件:shutil.copyfile(old_path, new_path)old_pathnew_path都只能是文件。
  • 复制文件:shutil.copy(old_path, new_path)old_path只能是文件,但new_path既可以是文件,也可以是目录(该目录下创建一个同名文件)。
  • 移动目录/文件
  • 移动目录/文件:shutil.move(old_path, new_path)
  • 重命名目录/文件:os.rename(old_path, new_path)
  • 获取文件大小:os.path.getsize(path)
  • 获取文件属性:os.stat(path)
  • 修改文件权限和时间戳:os.chmod(path, mode)
    权限mode可以由以下标志位的或运算组成:
  • stat.S_IXOTH: 其他用户有执行权0o001
  • stat.S_IWOTH: 其他用户有写权限0o002
  • stat.S_IROTH: 其他用户有读权限0o004
  • stat.S_IRWXO: 其他用户有全部权限(权限掩码)0o007
  • stat.S_IXGRP: 组用户有执行权限0o010
  • stat.S_IWGRP: 组用户有写权限0o020
  • stat.S_IRGRP: 组用户有读权限0o040
  • stat.S_IRWXG: 组用户有全部权限(权限掩码)0o070
  • stat.S_IXUSR: 拥有者具有执行权限0o100
  • stat.S_IWUSR: 拥有者具有写权限0o200
  • stat.S_IRUSR: 拥有者具有读权限0o400
  • stat.S_IRWXU: 拥有者有全部权限(权限掩码)0o700
  • stat.S_ISVTX: 目录里文件目录只有拥有者才可删除更改0o1000
  • stat.S_ISGID: 执行此文件其进程有效组为文件所在组0o2000
  • stat.S_ISUID: 执行此文件其进程有效用户为文件所有者0o4000
  • stat.S_IREAD: windows下设为只读
  • stat.S_IWRITE: windows下取消只读
  • 读取和设置环境变量:os.getenv()os.putenv()
  • 当前使用的平台:os.name。Windows是'nt',Linux/Unix是'posix'
  • 当前平台使用的行终止符:os.linesep。Windows使用'\r\n',Linux/Unix使用'\r'