以下内容参考自《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_path
和new_path
都只能是目录,而且new_path
必须不存在。 - 复制文件:
shutil.copyfile(old_path, new_path)
。old_path
和new_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'
。