以下内容参考自《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'
。