文件处理

Posted lazyball

tags:

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

打开文件的方式

方式一:

1. 打开文件,得到一个句柄并赋值给一个变量
f=open("aa","r",encoding="utf8")
2. 通过句柄对文件进行操作
data=f.read()
3. 关闭文件
f.close()

方式二:

with open("aa","r",encoding="utf8") as f:
    data=f.read()

打开文件的模式

r,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
a,追加写模式【不可读;不存在则创建;存在则只追加内容】

rb,二进制只读模式
wb,二进制只写模式
ab,二进制追加模式

"+" 表示可以同时读写某个文件
r+, 读写【可读,可写】
w+,写读【可读,可写】
a+, 写读【可读,可写】

x, 只写模式【不可读;不存在则创建,存在则报错】
x+ ,写读【可读,可写】
xb

操作文件的方式

f.read() #读取所有内容,光标移动到文件末尾
f.readline() #读取一行内容,光标移动到第二行首部
f.readlines() #读取每一行内容,存放于列表中

f.write(1111
222
) #针对文本模式的写,需要自己写换行符
f.write(1111
222
.encode(utf-8)) #针对b模式的写,需要自己写换行符
f.writelines([333
,444
]) #文件模式  自己写换行符

文件的光标问题

f.seek()
f.seek(0) 从文件开头重新开始读取
s.seek(offset,whence=0)
offset -- 开始的偏移量,也就是代表需要移动偏移的字节数
whence:可选,默认值为 0。
seek(0,0) 默认移动到文件开头或简写成seek(0)
seek(x,1) 表示从当前指针位置向后移x(正数)个字节,如果x是负数,则是当前位置向前移动x个字节
seek(x,2) 表示从文件末尾向后移x(正数)个字节,如果x负数,则是从末尾向前移动x个字节

典型的例子:模仿tail -f 
import time
with open(test.txt,rb) as f:
    f.seek(0,2) #将光标移动到文件末尾,再向后移动0个字节数 从文件末尾开始读
    while True:
        line=f.readline()
        if line:
            print(line.decode(utf-8))
        else:
            time.sleep(0.2)

修改文件的方式

import os
#以只读的方式打开源文件 以写的方式创建新的文件
with open(aa.txt,r,encoding=utf-8) as r_f,open(bb.txt,w,encoding=utf-8) as w_f:
    for line in r_f: #将源文件内容写入新文件  并且修改
        if line.startswith(你好):
            line=修改了

        w_f.write(line)
#目前就有了两个文件,但是只需要一个修改后的文件,原理就是删除源文件,将新文件重命名
##删除和重命名文件
os.remove(aa.txt)
os.rename(bb.txt,aa.txt)

二进制方式操作文件

技术图片
读出二进制文件的方法:
with open(aa,rb) as f:
    print(f.read())
    f.seek(0)
    print(f.read().decode(gbk)) #windows上是gbk
‘‘‘
b‘xbbxb9xd3xd0xcaxabxbaxcdxd4xb6xb7xbd
‘
还有诗和远方
‘‘‘

写入二进制文件的方法:

with open("aa","wb") as f:
    f.write("还有诗和远方
".encode("utf8"))

使用二进制方式,保存图片

with open(ff.jpg,rb) as read_f,        open(wuwu_new.jpg,wb) as write_f:
    write_f.write(read_f.read())

 

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

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

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

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

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

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

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