Python-18-函数_07_文件处理
Posted newmet
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-18-函数_07_文件处理相关的知识,希望对你有一定的参考价值。
文件处理流程:
1、打开文件,得到文件句柄并赋值给一个变量
2、通过句柄对文件进行操作
3、关闭文件
# Example 1 # f = open(‘a‘,encoding=‘utf-8‘) # 打开文件,得到文件句柄并赋值给一个变量 # data = f.read() # 通过句柄对文件进行操作 # print(data) # f.close() # 关闭文件
##################### 打开文件的模式 ##################
默认为文本模式,只能是字符串(文件没有修改一说,全是覆盖!!)
r -- 只读模式【默认模式;文件必须存在,不存在则抛出异常】
w -- 只写模式【不可读;不存在则创建;存在则清空内容】
a -- 只追加写模式【不可读;不存在则创建;存在则只追加内容】
x -- 只写模式【不可读;不存在则创建;存在则报错】(不常用,没什么用)
##################### 打开文件的模式 ##################
对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,
使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
rb wb ab
以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
##################### 打开文件的模式 ##################
"+" 表示可以同时读写某个文件
r+, 读写【可读,可写】
w+, 写读【可读,可写】
a+, 写读【可读,可写】
##################### 打开文件的模式 ##################
# 1、r -- 只读模式 # f = open(‘a‘,‘r‘,encoding=‘utf-8‘) # 默认打开模式就为 r # data = f.read() # 读取文件全部,如果这里读取了,下面再出现readline 就没有文件读取了。 # print(data) # print(f.readable()) # 结果:True 判断当前文件是否是-只读(r) # print(f.readline()) # 读取文件 第一行 (一次读一行) # print(f.readline(),end="") # 读取文件 第二行 并且第二行、第三行之间没有 另隔一行 换行 # print(f.readline()) # 读取文件 第三行 # data = f.readlines() # 将文件所有行,按列表的形式输出 # print(data) # f.close() # 2、w -- 只写模式 # 写模式--如果文件不存在,新建一个文件;如果文件存在,会把该文件清空(==新建一个空文件,覆盖原文件) # f = open(‘a1‘,‘w‘,encoding=‘utf-8‘) # f.write("newmet.top == 初相识 01 ") # f.write("newmet.top == 初相识 02 ") # f.write("new met.top 初相识 03 ") # print(f.writable()) # 结果:True 判断当前文件是否是-只写(w) # f.writelines([‘111 ‘,‘222 ‘,‘333 ‘]) # # f.close() # 3、a -- 只追加写模式 # f = open(‘a1‘,‘a‘,encoding=‘utf-8‘) # f.write("写到文件最后") # 类似 日志访问记录,自动追加到文件最后 # f.close() # 4、f.close 可以不写,利用with关键字去只写、只读文件: # 1)打开一个文件: with open(‘a1‘,‘w‘,encoding=‘utf-8‘) as f: f.write("newmet.top 初相识 ") # 2)同时打开两个文件: with open(‘a‘,‘r‘,encoding=‘utf-8‘) as src_f, open(‘a1‘,‘w‘,encoding=‘utf-8‘) as dst_f: # 同一行代码太长,加 enter 换行 data = src_f.read() dst_f.write(data)
##################### 文件的修改 ##################
# 1、文件取出来、修改 src_f = open(‘文件修改‘,‘r‘,encoding=‘utf-8‘) data1 = src_f.readlines() # 列表 src_f.close() dst_f = open("文件修改-01","w",encoding="utf-8") # f2.writelines(data1) dst_f.write(data1[0]) dst_f.close() # 2、文件覆盖 src_f = open(‘文件修改‘,‘r‘,encoding=‘utf-8‘) data1 = src_f.readlines() # 列表 src_f.close() dst_f = open("文件修改","w",encoding="utf-8") # f2.writelines(data1) dst_f.write(data1[0]) dst_f.close() # 上面1、2合并在一起: with open(‘文件修改‘,‘r‘,encoding=‘utf-8‘) as src_f, open(‘文件修改-01‘,‘w‘,encoding=‘utf-8‘) as dst_f: # 同一行代码太长,加 enter 换行 data = src_f.read() dst_f.write(data)
##################### b模式 ##################
f = open(‘a1‘,‘rb‘) # b模式不能指定编码 data = f.read() print(data) # 二进制 print(data.decode(‘utf-8‘)) # 字符串 f.close() f = open(‘a1‘,‘wb‘) # b模式不能指定编码 f.write(bytes(‘newmet ‘,encoding=‘utf-8‘)) # 编码 f.write(‘初相识‘.encode(‘utf-8‘)) # 编码 f.close() f = open(‘a1‘,‘ab‘) # b模式不能指定编码 f.write(‘初相识‘.encode(‘utf-8‘)) # 编码 f.close()
##################### 文件处理的其他方法 ##################
f=open(‘a1‘,‘r+‘,encoding=‘utf-8‘) f.read() #读取所有内容,光标移动到文件末尾 f.readline() #读取一行内容,光标移动到第二行首部 f.readlines() #读取每一行内容,存放于列表中 print(f.encoding) # 输出 读取时文件使用的编码 f.flush() # 刷新 保存 print(f.name) # 打印文件名 f=open(‘a1‘,‘r+‘,encoding=‘utf-8‘,newline=‘‘) # 读取文件中真正的换行符号( ) # 光标的移动 # 一: read(3): # 1. 文件打开方式为文本模式时,代表读取3个字符 # 2. 文件打开方式为b模式时,代表读取3个字节 # 二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate print(f.tell()) # 定位光标位置 f.readline() print(f.tell()) f.seek(10) print(f.tell()) data=f.truncate(10) # 截取从开始一直到第10个 部分 print(data) ############ seek 0、1、2 ########## # 1、f.seek(3,0) # 0 可写可不写,代表从开头位置算起 f=open(‘seek.txt‘,‘r‘,encoding=‘utf-8‘) print(f.tell()) # 0 f.seek(10) print(f.tell()) # 10 f.seek(3) print(f.tell()) # 3 # 2、f.seek(3,1) # 1 代表相对位置,从上一次光标所在位置算起 # 相对位置,只能是b模式,而且不能有encoding编码 f=open(‘seek.txt‘,‘rb‘) print(f.tell()) # 0 f.seek(10,1) # 10 print(f.tell()) f.seek(3,1) print(f.tell()) # 13 # 3、f.seek(3,2) # 2 代表相对位置,从末尾光标所在位置算起 # 相对位置,只能是b模式,而且不能有encoding编码 f=open(‘seek.txt‘,‘rb‘) print(f.tell()) f.seek(-10,2) print(f.read()) # 结果:b‘2 newmet3‘ ############ seek 0、1、2 ########## # 看日志最后一行内容: # 1、基础方法: f=open(‘日志文件‘,‘rb‘) data=f.readlines() print(data[-1].decode(‘utf-8‘)) # 2、seek方法: # 看日志最后一行内容: f=open(‘日志文件‘,‘rb‘) for i in f: # 循环文件的推荐方式 要一行给一行 offs = -3 # 定义一个偏移量 while True: f.seek(offs,2) data=f.readlines() if len(data)>1: print(‘最后一行:%s‘%(data[-1].decode(‘utf-8‘))) break offs*=2 # 倒序阅读,逐渐增加偏移量
以上是关于Python-18-函数_07_文件处理的主要内容,如果未能解决你的问题,请参考以下文章