8.10 文件操作
1 目录结构
如果要使用python读写文件,手写需要知道文件的位置,也就是目录结构。设置好工作目录可以方便读写文件,可以将需要操作的文件放在项目目录下。
如果使用文件绝对路径,就需要对不同系统目录的写法有所了解,windows目录结构与Linux目录结构主要差别在两点:
第一,Linux系统不存在盘符,所有数据路径都是有“/”开始;
第二:Linux系统采用正斜线分割目录,windows采用反斜线分割目录。在python中可以使用正斜线。
windows系统目录结构:“C:/Users/xxx/Desktop”
Linux系统目录结构:“/home/xxx/”
Mac系统目录结构:“/User/xxx/Desktop/”
为了减少操作系统间不同目录的影响,python提供了os和os.path模块来处理目录问题,从python 3.5开始引入新的pathlib库,可以更加面向对象,更加统一的方式来完成文件操作。
import os
#获取当前工作目录,即当前python脚本工作的目录路径
print(os.getcwd())
#改变当前脚本工作目录
os.chdir("C:/Users/xxx/Desktop/pydata/"
# 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
print(os.listdir())
表 1 文件系统属性值和函数汇总
| 函数 | 文件系统常量或操作 |
|---|---|
| os.getcwd()、Path.cwd() | 获取当前目录 |
| os.name | 给出当前系统平台的通用标识 |
| sys.platform | 给出当前系统平台的特定信息 |
| os.environ | 将环境变量映射为字典 |
| os.listdir(path) | 获取目录中的文件 |
| os.scandir(path) | 获取目录信息,得到的是os.DirEntry对象运代器 |
| os.chdir(path) | 改变当前目录 |
| os.path.join (elements), Path.joinpath (elements) | 将参数中的字符串合并到路径中 |
| os.path.split(path) | 将路径拆分为主体部分和尾部(路径的最后一部分 |
| Path.parts | 以路径各部分为元素的元组 |
| os.path.splitext(path) | 将路径拆分为主体部分和文件扩展名 |
| path.suffix | 路径对象的文件扩展名 |
| os.path,basename (path) | 获取路径名中的文件名 |
| Path.name | 路径对象的文件名 |
| os.path.commonprefix(list_ of_paths) | 获取路径列表中所有路径的共同前缀 |
| os.path.expanduser(path) | 将“~”或“~用户名”扩展为完整的路径名 |
| os.path.expandvars (path) | 将参数路径中的环境变量扩展为实际路径 |
| os.path.exists(path) | 检测某路径是否存在 |
| os.path.isdir(path)、Path.is_dir( | 检测某路径是否为目录 |
| os.path.isfile(path)、Path.is_file() | 检测某路径是否为文件 |
| os.path.islink(path)、Path.is_link() | 检测某路径是否为符号链接(Windows 快捷方式不算) |
| os.path.ismount(path) | 检测某路径是否为设备挂载点(mount point) |
| os.path,isabs (path)、Path.is_absolute() | 检测某路径是否为绝对路径 |
| os.path.samefile(path_1,path_2) | 检测两个路径是否指向同一个文件 |
| os.path.getsize(path) | 获取文件大小 |
| os.path.getmtime(path) | 获取文件最后修改时间 |
| os.path.getatime(path) | 获取文件最后访问时间 |
| os.rename (old path, new_path) | 对文件重命名 |
| os.mkdir(path) | 创建目录 |
| os.makedirs(path) | 创建目录及必要的父级目录 |
| os.rmdir(path) | 删除目录 |
| glob.glob (pattern) | 获取与通配符匹配的文件清单 |
| os.walk (path) | 获取目录树下所有的文件名 |
pathlib
from pathlib import Path
Path.cwd()
表2 pathlib部分属性和方法
| 方法和属性 | 属性值或操作 |
|---|---|
| os.rmdir(path) | 删除目录 |
| path.cwd () | 获取当前目录 |
| Path.parts | 以路径各部分为元素的元组 |
| Path.suffix | 路径中的文件扩展名 |
| Path.name | 路径中的文件名 |
| Path.exists() | 检测路径是否存在 |
| Path.is dir() | 检测路径是否为目录 |
| Path.is file() | 检测路径是否为文件 |
| Path.is symlink() | 检测路径是否为符号链接(Windows快捷方式不算) |
| Path.is absolute() | 检测是否为绝对路径 |
| Path.samefile(Path2) | 检测两个路径是否指向同一个文件 |
| Path1.rename(Path2) | 对文件重命名 |
| Path.mkdir([parents=True]) | "创建目录,如果参数parents为True则创建必要的父级目录" |
| Path.rmdir() | 删除目录 |