Python中对文件处理

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()
原文地址:https://www.cnblogs.com/Ghostant/p/11814976.html