文件处理

Posted xulan0922

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件处理相关的知识,希望对你有一定的参考价值。

 

文件打开

语法:

open(filename,mode,encoding=‘‘)

解释:

filename:代表你要访问的文件名

mode:这里代表你打开文件的模式,有 只读,写入,读写,追加等模式;默认为只读模式。

encoding:编码与解码的方式

编码:‘字符串‘---------encode---------》bytes
解码:bytes---------decode---------》‘字符串‘

打开文件的不同模式见下表

技术分享图片

注意: b的方式不能指定编码,比如f=open(‘test11.py‘,‘rb‘,encoding=‘utf-8‘)是不对的

文件的操作方法

文件的常用方法有13种,如下图

技术分享图片

技术分享图片

注意:read(3)代表读取三个字符,其余的关于光标移动的方法都是以字节为单位,如seek,tell,truncate

seek方法深入

seek函数语法:

fileObject.seek(offset, whence)

  • offset:光标开始的偏移量,也就是代表需要移动偏移的字节数
  • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

若文件为

aaa
123
f = open(123.txt,rb)   --如果whence是1或者2模式 这里一定要加b模式
f.seek(-5,2)               --如果whence是2 光标偏移量一定要是负数
print(f.read())
结果:b‘ 123‘ --win下回车是 ,linux下是

需求:读取文件的最后一行

方法一:

f = open(123.txt,rb)
date = f.readlines()
print(date[-1].decode())    --这种方法不好,还是把整个文件读取并存入内存

方法二:

f=open(d.txt,rb)        --核心思想是:先假设一个偏移量,然后不断加大,不断从文件末尾seek这个偏移量,直到读出最后两行,然后data[-1]就是最后一行
for i in f:                 --循环文件的推荐方式,一行一行给
    offs=-3
    n=0
    while True:
        f.seek(offs,2)
        data=f.readlines()   --读取当前光标到文件末尾的内容
        if len(data) > 1:
            print(最后一行,data[-1])
            break
        offs*=2

 

以上是关于文件处理的主要内容,如果未能解决你的问题,请参考以下文章

常用python日期日志获取内容循环的代码片段

处理屏幕旋转上的片段重复(带有示例代码)

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

你如何在 python 中处理 graphql 查询和片段?

如何有效地打开 30gb 的文件并处理其中的片段而不减慢速度?

是否有在单个活动中处理多个片段的 Android 设计模式?