open(file_name,mode,encoding)输出参数:
file_name = 'a.txt' # 以相对路径打开(优先使用,可移植性强) ''' a.txt # 与当前py程序在同一级目录下 r'dira.txt' # 在当前路径的子目录dir下的a.txt ''' file_name = r'D:PYTHONOLDBOYDAY7a.txt' # 以绝对路径打开 #********************************************************** mode = 'rt' 'rb' # 只读模式打开,r表示文本模式,b表示字节模式。对于图片、音频、视频等文件需要用字节模式操作 ''' 1.文件不存在会报错 2.文件指针移到文件开头 ''' mode = 'wt' 'wb' # 只写模式打开 ''' 1.文件不存在则创建文件,指针在文件开头 2.文件存在则会清空文件内容,指针在文件开头 ''' mode = 'at' 'ab' # 追加模式打开(只写),指针在文件末尾 ''' 1.文件不存在则创建文件,指针在文件开头 2.文件存在则将指针移到文件尾。(所写入的内容追加到文件尾) ''' #********************************************************** encoding = 'utf-8' encoding = 'GBK' ''' 指定文件的打开编码模式(文件以什么编码存,就以什么编码打开) 即可保证不乱码 当以字节模式打开时,该参数不可设置! ''' #********************************************************** open(file_name, mode, encoding=encoding)
open()方法返回一个文件对象,使用完毕后需要调用f.close()方法释放文件对象。python中提供了更简洁的方式:
with open('a.txt','r') as f: pass
# 在with代码块下的语句都执行完时,会自动释放文件内存。
文件对象的内置方法:
with open('a.txt','r',encoding='utf-8') as f: data = f.read() # 一次性读取所有内容到内存中 print(data) with open('a.txt','r',encoding='utf-8') as f: data = f.readline() # 读取一行内容到内存中 print(data) with open('a.txt','r',encoding='utf-8') as f: data = f.readlines() # 一次性读取所有内容,以每行内容作为元素返回一个列表 print(data)
with open('a.txt','w',encoding='utf-8') as f: f.write('哈哈哈哈') f.writelines(['哈哈哈','啊啊啊啊'])
**********************************************************************************************
关于读写要注意的地方:
当以w方式打开一个文件,调用f.write()的方法时,写入的数据在内存中,注意:在f.close()之后才会写入到硬盘之中。
当以r方式打开一个文件,调用f.read()的方法时,将实时读取硬盘中的数据。(内部机制可能时句柄,操作系统会向句柄管理员实时汇报内容)
验证代码:
监控:
import time with open('c.txt','r',encoding='utf-8')as f: f.seek(0,2) while True: res = f.readline() if res: print(res,end='') else: time.sleep(0.5)
写入:
import time with open('c.txt', 'a', encoding='utf-8') as f: while True: time.sleep(1) print('zhengzaishuru') f.write(time.strftime('%Y-%m-%d %H:%M:%S '))
将监控不到任何数据,原因就是:在写入未运行close()之前,内容不会被写入。而中断程序,将不会运行close()方法。所以c.txt里的内容不会有任何变化。
加入flush()将写入的内容存储至硬盘
import time with open('c.txt', 'a', encoding='utf-8') as f: while True: time.sleep(1) print('zhengzaishuru') f.write(time.strftime('%Y-%m-%d %H:%M:%S ')) f.flush()