Django 用户认证 用户 邮箱登录 邮箱注册 ORM or,and,not form.py FORM ModelForm Paginator 分页 HTMl JQuery 定位元素 ajax django切片 restfulapi 跨域 Ubantu Python Mysql Scrapy 爬虫 导出 Python读写 Pycharm 破解 session re sqlit3 生成式 其他 Prism 富文本 CSS Nginx 部署 请求头 抓包 协议 selenium Ubuntu 宝塔 AI Comfy-ui ollama dify open-webui Git docker
Python 文件读写操作模式
张建行 2021年7月19日 15:52 61 文章标签: Python读写

Python 文件读写操作模式的具体权限如图所示

在这里插入图片描述
# 大象装进冰箱的三个步骤:第一步:打开冰箱,第二步:把大象塞进去,第三步:关闭冰箱
# 文件读写:1.打开文件。2.对文件进行读/写。3.关闭文件
# 文件打开的几种模式:
# 1.w:只写模式,如果要打开的文件不存在,则会自动创建。如果存在,则会自动打开。光标在文件的开头位置。会对文件进行覆盖写入。
# 2.r:只读模式,如果打开的文件不存在,则会报错。如果存在,则会自动打开。光标在文件的开头位置。
# 3.w+:写读模式,可读可写,如果文件不存在,则会自动创建。如果存在,则会自动打开。使用open函数打开文件的时候,会自动将文件里面的内容清空。光标在文件的开头位置。会对文件进行覆盖写入。
# 4.r+:读写模式,如果文件不存在,则会报错。如果文件存在,则会自动打开。光标在文件的开头位置。区别于写读模式,打开文件的时候不会清空文件内容。如果光标不在文件的末尾位置,会覆盖源文件。会根据光标的写入位置进行覆盖。没有覆盖的内容将会保留。(并不是完全覆盖)
# 5.a:追加只写模式,如果打开的不存在,则会自动创建。如果存在,则会自动打开。假如文件是空的,光标会在文件的开头位置,假如文件不为空,光标在文件的末尾位置。不论光标位置在哪里,都会在文件的末尾位置追加字符。
# 6.a+:追加读写模式,如果文件不存在,则会自动创建。如果存在,则会自动打开。假如文件是空的,光标会在文件的开头位置,假如文件不为空,光标在文件的末尾位置。不论光标位置在哪里,都会在文件的末尾位置追加字符。

# 一些总结:一般的文件流操作都包含缓冲机制,write方法并不直接将数据写入文件,而是先写入内存中特定的缓冲区。flush方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区。正常情况下缓冲区满时,操作系统会自动将缓冲数据写入到文件中。至于close方法,原理是内部先调用flush方法来刷新缓冲区,再执行关闭操作,这样即使缓冲区数据未满也能保证数据的完整性。如果进程意外退出或正常退出时而未执行文件的close方法,缓冲区中的内容将会丢失。
# -----------------------------w只写模式----------------------------------------------
# 1.创建文件操作的句柄
# open():第一个参数:文件名;第二个参数:文件的打开方式;第三个参数:文件的编码格式。这几个参数之间的位置不能调换。
f = open('test.txt', 'w', encoding='utf-8')
# 1.writable():判断文件是否可写,返回的结果是True或者False
print(f.writable())
# 2.readable():判断文件是否可读,返回的结果是True或者False
print(f.readable())
# 3.tell():返回当前的光标位置
print(f.tell())
f.write('123')
print(f.tell())
# 4.name():返回当前文件名称
print(f.name)
# 5.encoding:返回当前文件的编码格式
print(f.encoding)
# 6.seek():返回到指定的光标位置
f.seek(0)
print(f.tell())
f.write('456')
# 7.close():关闭文件。因为文件写入,首先是写入到计算机缓存当中,然后再写入到硬盘里。假如不对文件进行关闭,万一电脑出问题关机或者重启,则会导致文件丢失或者损坏。
f.close()
# -----------------------------------r只读模式----------------------------------------------
f = open('test1.txt', 'r', encoding='utf-8')
print(f.tell())
print(f.readable())
print(f.writable())
# read()读取文件,如果read()里面不填写参数,则默认会读取整个文件的内容。
print(f.read())
print(f.tell())
f.seek(0)
print(f.read(5))
# readline():一次只会读取一行数据。
print(f.readline())
print(f.readline())
print(f.readline())
# readlines():会读取所有行的数据,但是会将每一行的数据当做一个元素存放在列表中。
print(f.readlines())
f.close()
# ------------------------------------w+写读模式------------------------------------------
# f=open('test2.txt','w+',encoding='utf-8')
# print(f.tell())
# print(f.readable())
# print(f.writable())
# f.write('456')
# print(f.tell())
# f.seek(0)
# print(f.read(1))
# f.close()
# -----------------------------------r+读写模式------------------------------------------
# f=open('test3.txt','r+',encoding='utf-8')
# print(f.tell())
# print(f.writable())
# print(f.readable())
# print(f.read(3))
# print(f.tell())
# f.write('aaa')
# print(f.tell())
# f.seek(5)
# f.write('bbb')
# print(f.tell())
# f.close()
# ---------------------------------------a:追加只写模式------------------------------------
# f=open('test4.txt','a',encoding='utf-8')
# print(f.tell())
# print(f.readable())
# print(f.writable())
# f.write('bbb')
# print(f.tell())
# f.seek(5)
# f.write('ccc')
# f.close()
# ---------------------------------------a+:追加读写模式-----------------------------------
# f=open('test5.txt','a+',encoding='utf-8')
# print(f.tell())
# print(f.writable())
# print(f.readable())
# f.seek(0)
# print(f.read(5))
# print(f.tell())
# f.write('7887')
# print(f.tell())
# f.close()
# --------------------------------------trucate-----------------------------------------
# f=open('test6.txt','a+',encoding='utf-8')
# print(f.tell())
# f.seek(2)
# #trucate():指定长度的话,就从文件的开头开始截断指定长度,其余内容删除;不指定长度的话,就从文件开头开始截断到当前位置,其余内容删除。
# f.truncate(3)
# f.close()
# ----------------------------------flush----------------------------------------------
# 假如写入数据的时候,文件中没有写入的数据,需要用到flush刷新一下缓冲区。直接将文件写入到本地文件中。
# f=open('test7.txt','w',encoding='utf-8')
# f.write('123456')
# f.flush()
# f.close()