1. OS模块
- 操作 “文件 和 目录” 的路径、位置等
2. 路径分隔符
- win下为"\\"
- Linux下为"/"
3. 常用方法
# 1. os.getcwd() 返回当前工作目录的绝对路径
print(os.getcwd())
# 2. os.chdir(path) 改变当前工作目录到指定的路径
print("修改之前的工作目录 : %s" % os.getcwd())
os.chdir('E:')
print("之前之后的工作目录 : %s" % os.getcwd())
# 3. listdir (path='.') 返回 path 指定的文件夹所包含的 文件或文件夹 的名字的列表
dirs = os.listdir('.\\dirs')
print(dirs)
# 4. os.mkdir(path) 创建单层目录
# -- 如果该目录已存在抛出异常
os.mkdir('.\\dir1')
os.mkdir('.\\dir1') # FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件
# 5. os.makedirs(path) 用于递归创建多层"目录"
# -- 如果该目录已存在抛出异常。
os.makedirs('.\\a\\b\\c.txt')
os.makedirs('.\\a\\b\\c.txt') # FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件
# 6. os.remove(path) 用于删除指定路径的文件。
# -- 如果指定的路径是一个目录,将抛出 OSError 。
os.remove('.\\dirs\\a.txt')
os.remove('.\\dirs') # PermissionError: [WinError 5] 拒绝访问
# 7. os.rmdir(path) 用于删除单层目录
# -- 仅当文件夹为空的才可以删除, 否则, 抛出 OSError
os.rmdir('a')
os.rmdir('b') # OSError: [WinError 145] 目录不是空的
# 8. os.removedirs(path) 递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常
os.removedirs('.\\a\\b')
os.removedirs('.\\a\\b\\c\\d') # OSError: [WinError 145] 目录不是空的
# 9. os.rename(src, dst) 重命名文件或目录,从 src 到 dst
# -- 如果 dst 是一个存在的目录, 将抛出OSError
os.rename('a', 'b')
os.rename('a', 'b') # FileNotFoundError: [WinError 2] 系统找不到指定的文件
os.rename('c', 'b') # FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件
# 10. os.system(command) 运行系统的shell命令
# -- 将字符串转化成命令
cmd1 = 'calc'
cmd2 = 'pip install lxml'
os.system(cmd1) # 打开计算器
os.system(cmd2) # 安装 'lxml'
# 11. 判断文件
path = '.\\a\\b.txt'
path1 = path
path2 = '.\\a\\b.txt'
# (1). os.path.exists(path) 判断指定路径(目录或文件)是否存在
print(os.path.exists(path))
# (2). os.path.isabs(path) 判断指定路径是否为绝对路径
print(os.path.isabs(path))
# (3). os.path.isdir(path) 判断指定路径是否存在且是一个目录
print(os.path.isdir(path))
# (4). os.path.isfile(path) 判断指定路径是否存在且是一个文件
print(os.path.isfile(path))
# (5). os.path.samefile(path1,path2) 判断path1和path2两个路径是否指向同一个文件
print(os.path.samefile(path1,path2))
# 12. 路径解析
path = '.\\a\\b\\c.tct'
# # (1) os.path.basename(path) 去掉目录路径,单独返回文件名
print(os.path.basename(path))
# (2) os.path.dirname(path) 去掉文件名,单独返回目录路径
print(os.path.dirname(path))
# (3) os.path.join(path1[, path2[, ...]]) 将 path1 , path2 各部分组合成一个路径名
print(os.path.join('..\\os模块', 'a\\b', 'c.txt'))
print(os.path.join('a\\b\\c', 'b', 'b'))
# (4) os.path.split(path) 分割文件名与路径,返回 (f_path, f_name) 元组。
# -- 如果完全使用目录,它会将最后一个目录作为文件名分离
# -- 仅解析 path,不会判断文件或者目录是否存在
print(os.path.split('.\\a\\b\\c'))
# (5) os.path.splitext(path) 分离文件名与扩展名,返回 (f_path,f_name) 元组
# -- f_path:包含路径、文件名,不包含扩展名
# -- f_name:指扩展名
print(os.path.splitext(path))
4. 其他方法
os.name # 返回当前使用的操作系统【包括:'mac','nt'】
os.path.getsize(file) # 返回指定文件大小,单位是字节
os.path.getatime(file) # 返回指定文件最近的访问时间
os.path.getctime(file) # 返回指定文件的创建时间
os.path.getmtime(file) # 返回指定文件的最新的修改时间
5. shutil模块常用函数
shutil.move(file_path,save) # 将文件移动到 save文件夹下,同时可以重命名
shutil.copy(file_path,save) # 将文件复制到 save文件夹下,同时可以重命名