文件读写时的流程
1,打开文件
s=open(filename,mode=‘rt’)
#filename指的是文件名,mode指的是文件读取的模式,默认是“rt”,意思是以文本文件模式读写。还有“w”“x”“a”“b”"+"等一些就不一一介绍了。
有以下几种情况:
1.1,与要访问的文件在同一个文件夹时,
s=open(‘study.txt’)
1.2,要访问的文件不在同一个文件夹时,
s=open(’…/…/project/study.txt’) #相对路径
s=open(’/home/project/study.txt’) #绝对路径
(这里我个人一般使用相对路径,方便在不同环境下进行操作)
2,读/写文件
s.read/write (num) #num表示读取/写入多少个字符或字节,默认不填,表示读/写完
s.readline() #表示一行行的读取
3,关闭文件
s.close() #注意,这个很重要很重要很重要。文件打开后会占用系统的资源,如果不关闭文件,系统资源一时是无法回收,如果文件占用资源过大,会导致系统其他程序运行缓慢或者崩溃,只有等到垃圾回收时自动回收。
文件读写时的遇到的一些异常
最常规的异常就是文件打开失败时,系统会报OSError错误。
FileNotFoundError: [Errno 2] No such file or directory: ‘study.txt’
这类问题一般是open(filename)中,filename的路径写错了导致。
还有就是文件读取失败时,系统会报OSError错误。
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x8b in position 1: invalid start byte
这类问题一般是开打的文件非文本文件格式,例如开打了压缩包,图片,视频,音频等文件,python默认是用utf-8的去读的。通常解决的办法是在打开文件时用二进制去打开。
我常用的方法是:
s=open(filename,mode='rb‘) #b代表用二进制的方式去打开。
还有个比较少见的问题是 内存溢出的问题
当文件读写时,是先写到缓存上,再写到硬盘上的。
如果文件过大时,缓存装不下,就导致内存溢出。
例如:
#假设要把a.txt文件复制到b.txt文件中
a=open(‘a.txt’)
b=open(‘b.txt’)
b.write(a.read)
a.close()
b.close()
此时a文件过大的时候这里就会报内存溢出
解决办法:
简单的就是 修改读写语句
改为b.write(a.readline(2048))#2048指的是读取2018行
或者用try-except 语句捕获异常。
然后:
s.flush() #把缓存中的内容写到硬盘中,再清空缓存
s.seek(0,1) #从当前位置移动0个位置开始读写