文件的操作要注意路径的问题,这里用的都是相对路径。
# 文件操作 r:写模式,w:读模式,建立新文档覆盖原来的文档 # f=open('a.txt','r',encoding='utf-8') # # data=f.read() # # print(data) # # 可读文件,默认是可读文件,readline是读文件第几行 # print(f.readable()) # print('第一行:',f.readline(),end='') # end=''表示取消换行 # print('第二行:',f.readlines()) # f=open('b','w',encoding='utf-8') # f.write('111111111111\n') # f.write('2222222222222\n') # f.writelines(['第五行\n','第六行\n']) # 以列表的形式写入文件 # f.close() # 追加模式,一般在日志文件用的多 # f=open('b','a',encoding='utf-8') # f.write('写到文件最后') # f.close() # 读写模式 写的时候只从光标的位置往后写 # f=open('b','r+',encoding='utf-8') # print(f.read()) # f.write('离离原上草') # print(f.read()) # 只往新文件里写一行 # src_f=open('b','r',encoding='utf-8') # data=src_f.readlines() # src_f.close() # dst_f=open('b_new','w',encoding='utf-8') # dst_f.write(data[0]) # dst_f.close() # 使用with可以不用close语句 # with open('b','w') as f: # f.write('1111\n') # with open('a.txt','r',encoding='utf-8') as src_f,\ # open('b','r',encoding='utf-8') as dst_f: # print(src_f.read()) # print(dst_f.read()) # 以字节方式操作文件 后面不需要编码方式 # f=open('a.txt','rb') # data=f.read() # print(data) # # 没有编码方式还想看到内容进行解码 # print(data.decode('utf-8')) # 写字节文件时,要对字符串进行编码 # f=open('a_new','wb') # f.write(bytes('11111111\n',encoding='utf-8')) # f.write('小狗'.encode('utf-8')) # f=open('b','r+',encoding='latin-1') # data=f.read() # print(data) # python会在最后加一个/r,用newline来读取文件换行符号 seek用来控制光标的移动 # f=open('a.txt','r+',encoding='utf-8',newline='') # print(f.readline()) # print(f.tell()) # # 把光标往后移动三个字节 # f.seek(3) # print(f.tell()) # # 从光标往后的四个字符 # print(f.read(4)) # 使用f.truncate(10)来截取文件,截取的是字节,不是字符 # seek方法的使用,最好用b的方式打开文件 # f = open('a.txt','rb') # print(f.tell()) # # 2代表倒叙seek,倒叙seek10个字符,对于处理日志文件经常用 # f.seek(-15,2) # print(f.read()) # print(f.tell()) # # seek是从开头部分开始的 # f.seek(3) # print(f.tell()) # # seek还能设置从哪开始到哪结束 # f.seek(3,1) # print(f.tell()) # 循环文件内容,一次只循环一行
f=open('日志文件','rb') for i in f: print(i)
在实际的应用程序开发过程中,日志文件的数据量可能会特变大,如果还是从头开始会导致读取时间过长,所以只能从文件的最末端往前读,我们往往想读取的是日志文件的最后几行操作,那么如何获取日志文件最后一行操作呢:
f=open('日志文件','rb')
for i in f:
# 定义一次的偏移量
offs=-50
while True:
f.seek(offs,2)
data=f.readlines()
if len(data) > 1:
# data[-1]:取出最后一行
print('文件的最后一行是%s' %(data[-1].decode('utf-8')))
break
offs*=2
在循环体中,定义一次的偏移量,这里的偏移量是指字节,f.seek(offs,2)表明从文件的末尾开始循环,data取出一次偏移量所读取的行数,如果读取的行数大于1行,则取出最后一行,并用utf-8编码格式进行解码,并且终止循环;如果一次偏移量所读取的行数不大于1行,则增加偏移量offs*=2,继续循环读取,直到行数大于1行为止。文件内容如下所示:
输出结果: