运维问题:关于Linux文件的读写问题、

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个位置开始读写
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值