标签:必须 选择 while 用途 linux中 光标移动 直接 python 日志文件
f = open(‘file_management‘,‘r‘,encoding=‘utf-8‘) #默认就是只读模式 #文件句柄 data =f.read() print(data) f.close()
w模式:文件不存在,新建文件;文件存在,直接覆盖;无论怎样都是直接新建一个空文档覆盖原文档
f = open(‘new_file‘,‘w‘,encoding=‘utf-8‘) #文件句柄 print(f.writable()) #写入的内容必须是是字符串 f.write(‘11111111\n‘) f.write(‘22222222\n‘) f.writelines([‘3333\n‘,‘44444\n‘]) f.close()
a模式:追加模式
f = open(‘new_file‘,‘a‘,encoding=‘utf-8‘)
r+模式:可读可写(从光标处开始写)
f = open(‘new_file‘,‘r+‘,encoding=‘utf-8‘)
其他模式:
# r+ 读写 # w+ 写读 # x+ 写读 # a+ 写读 # “b”表示以字节方式操作,读取到的是字节,写入的也需要是字节 # rb=r+b # wb=w+b # xb=x+b # ab=a+b
f = open(‘new_file‘,‘rb‘) data = f.read() print(data) print(data.decode(‘utf-8‘)) f.close() #windows里面换行是\r\n;Linux中是\n f = open(‘new_file‘,‘wb‘) f.write(bytes(‘111\n‘,encoding=‘utf-8‘)) f.close() #写入并覆盖
with 方式打开,无需关闭
with open(‘file‘,‘w‘) as f, open(‘file_new‘,‘w‘,ending=‘utf-8‘): #文件操作
文件无所谓的修改,本质上都是覆盖,修改的过程其实是先打开旧文件,读取内容后重新写入并覆盖
修改的本质:打开一个文件,一行一行地读入内存,读一行放到新文件里面,这个过程中可以修改,完毕后加载到新文件里面,覆盖原有文件
f = open(‘file_management‘,‘r‘,encoding=‘utf-8‘) #文件句柄 print(f.readable()) print(‘-‘*80) print(f.readline(),end = ‘‘) print(f.readline(),end = ‘‘) print(f.readline(),end = ‘‘) print(‘-‘*80) print(f.read()) f.close()
注意光标的移动,一旦read()也就是读取了全部内容,光标移动到最后
readline()一次读一行,注意每一行末尾都有一个回车\n
readlines()全部读出变成一个列表,一行是一个元素
1、f.closed 文件是否关闭
2、flush()刷进硬盘
3、tell()当前位置
4、seek( point )移动光标位置,point除了read是字符,其余处理时都是处理字节
new_file
1234567890
f = open(‘new_file‘,‘rb‘) #要想使用第二种和第三种模式,必须用b方式,不指定encoding print(f.tell()) f.seek(10) print(f.tell()) f.seek(3) print(f.tell()) f.seek(3,0) #第一种模式,默认模式 print(f.tell()) f.seek(3,1) #第二种模式,相对位置 print(f.tell()) f.seek(-3,2) #第三种模式:从文件末尾倒着seek print(f.tell()) print(f.read())
result: 0 10 3 3 6 7 b‘890‘
第三种方式的用途:日志文件的处理
#循环文件的方式 for i in f: print(i) #耗费内存 for i in f.readlines(): print(i)
new_file 2018/8/1 alex 做了一件什么事 2018/8/1 alex 做了一件什么事 2018/8/1 alex 做了一件什么事 2018/8/1 alex 做了一件什么事 2018/8/1 alex 做了一件什么事 2018/8/1 alex 做了一件什么事 2018/8/1 alex 做了一件什么事 2018/8/1 alex 做了一件什么事 2018/8/2 joey 做了一件什么事
offs = 10 #偏移量 while True: f.seek(-offs,2) data = f.readlines() if len(data)>1: print(‘文件的最后一行是%s‘ %(data[-1].decode(‘utf-8‘))) break else: offs*=2 result: 文件的最后一行是2018/8/2 joey 做了一件什么事
5、read( num )读入num个字符
6、truncate( num )截取[0, num) (文件打开方式不能选择w+,以免一打开就把原文件清空
标签:必须 选择 while 用途 linux中 光标移动 直接 python 日志文件
原文地址:https://www.cnblogs.com/zhangzixiang/p/9448320.html