IO异常
正常的文件读取使用的过程是,打开文件,建立文件对象,读取内容或者写入内容,关闭文件对象释放资源。但是过程中可能出现异常情况,导致的一个典型错误是文件对象不能正常关闭,系统资源得不到释放。
因此要捕捉异常,处理类似释放资源的工作。
第一种方法:使用try filnally捕捉错误:
try:
f = open(r'd:\test\hamlet12.txt')
print(f.read())finally:
if f:
f.close()
第二种方法:with语句
with open(r'd:\test\hamlet1.txt') as f:
print(f.read())
使用with语句不需要关闭语句。
with open(r'd:\test\hamlet1.txt') as f:
for line in f.readlines():
print(line)
文件写入
write方法写入文件,w参数写入文本文件,wb写入二进制文件。写入之后close()方法关闭,写入的过程中,可以使用flush方法将内存中数据立即写入到文件中。
例子1:
f = open(r'd:\test\test20240802.txt','w')
f.write('测试test')
f.close()
例子2:
with open(r'd:\test\test20240802.txt','w') as fwriter:
fwriter.write('测试二进制test')
常用操作文件和目录的方法
常用的操作文件和目录的模块是os模块和shutil模块。
常用方法:
os.getcwd() | 获取当前python脚本工作目录 |
os.listdir() | 返回目录下的文件,os.listdir(‘c:\\’) |
os.remove(filepath) | 删除一个文件 |
os.removedirs(filepath) | 删除多个目录,os.removedirs(r‘d:\\test’) |
os.path.isfile(filepath) | 判断路径是否是一个文件 |
os.path.isdir(filepath) | 判断路径是否是一个目录 |
os.path.isabs() | 判断是否是绝对路径 |
os.path.exists(filepath) | 检测路径下是否有指定文件,os.path.exists(r’d:\\test’),是否有test文件夹 |
os.path.split() | 分离一个路径的目录名和文件名,os.path.split(r’/home/data/test.txt’),返回一个元组(‘/home/data’,’test.txt’) |
os.path.splitext() | 分离扩展名,os.path.splitext(r’/home/data/test.txt’),返回一个元组(‘/home/data/test’,’.txt’) |
os.path.dirname() | 获取路径名 |
os.path.basename() | 获取文件名 |
os.getenv() | 读取环境变量 |
os.putenv() | 设置环境变量 |
os.linesep | 获取当前系统平台使用的行终止符,windows使用’\r\n’,linux使用’\n’,Mac使用’\r’ |
os.name | 返回系统正在使用的平台,windows是’nt’,linux/unix是‘posix’ |
os.rename(oldname,newname) | 重命名文件或者目录 |
os.mkdirs(r‘c:\test\test01’) | 创建多级目录 |
os.mkdir(‘test’) | 创建单个目录 |
os.stat(file) | 获取文件属性 |
os.chmod(file) | 修改文件的权限与时间戳 |
os.path.getsize(filename) | 获取文件大小 |
shutil.copytree(‘olddir’,’newdir’) | 复制文件夹,两个参数都是目录,且newdir不能存在。 |
shutil.copyfile(‘oldfile’,’newfile’) | 复制文件,oldfile和newfile参数都只能是文件。 |
shutil.copy(‘oldfile’,’newfile’) | 复制文件,oldfile只能是文件,newfile可以是文件也可以是目录。 |
shutil.move(‘oldpos’,’newpos’) | 移动目录, |
os.rmdir(‘dir’) | 删除空目录 |
shutil.rmtree(‘dir’) | 删除空目录、有内容的目录。 |