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_1path_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() 删除目录