文件操作三大步骤
- 打开文件
- 增删改查
- 关闭文件
打开文件open r模式
f = open('路径文件',文件的操作,编码)
f = open('111.txt',mode='rt',encoding='utf-8') # f可写成任意变量,可叫文件句柄,文件操作符,文件操作对象,window默认编码方式位gbk,mode打开方式不写默认为rt b为byte模式(一般用于图片,视频等),默认为t字符模式
-
路径有绝对路径和相对文件路径
相对文件路径 就是相对于此刻运行的文件 绝对文件路径 从根目录下一直到文件名 需要进行转义,路径前加r
-
read()默认所有的文件内容都要读取,可指定内容数量,
f.read(3) # 读取三个字符 只有一种特殊情况,t(包括r,r+)模式下的read(n),代表的是n个字符,此外代表的全都是字节
-
readline() 每次只读取一行,读取出来的数据后面都有带有 ,也就是print时会导致多一次换行(本身print()就带有换行)
解决 f.readline().strip()
-
readlines() 将每一行形成一个元素,放到一个列表中,将所以的内容全部读出来,如果文件很大,占内存,
解决 f =open('aaa.txt',mode='rt',encoding='utf-8') # 默认模式带t,可不写 for line in f: print(line) # 一行一行的进行读取
w模式
写文件的时候我们要有写完文件就刷新的习惯. 刷新flush(),使用w模式的时候,在每次打开文件的时候会默认将把文件中的所有内容都清空,然后在操作
f= open('文件',mode='wt',encoding='utf-8')
f.write()
f.flush()
f.close() # 文件不存在会创建文件
a模式
都是在文件的末尾写入,不论光标在任何位置,写入的内容后追加在文件的末尾,不存在则会创建文件
r+
读写模式,必须是先读后写,因为光标默认在开头位置,当读完了以后再进行写入.我们以后使用频率最高的模式就是r+
如果先写,则会将之前的内容覆盖一部分在读的时候就是读取写入之后的内容(因为光标此时移动到了写的后面)
# 在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显示的是多少. 再写入或者操作文件的时候都是在结尾进行的操作.
w+
写读模式,所有的内容清空,然后写入.最后读取.但是读取的内容是空的,不常用
先读在写不就行了.w+模式下 其实和w模式一样,把文件清空了,在写的内容.所以很少人用
a+
a+模式下,不论是先读还是后读,都是读不到数据的,因为光标默认在最后
b模式下,此时不能指定编码,只能时二进制
seek()
seek(n)光标移动到n位置,注意: 移动单位是byte(字节),移动的是字符所有如果是utf-8的中文部分要是3的倍数,通常我们使用seek都是移动到开头或者结尾,移动到开头:seek(0,0) 可以看做成seek(0)
# 移动到结尾:seek(0,2) seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾
f = open("小小力", mode="r+", encoding="utf-8")
f.seek(0) # 光标移动到开头
content = f.read() # 读取内容, 此时光标移动到结尾
print(content)
f.seek(0) # 再次将光标移动到开头
f.seek(0, 2) # 将光标移动到结尾
content2 = f.read() # 读取内容. 什么都没有
print(content2)
f.seek(0) # 移动到开头
f.write("啦啦啦") # 写入信息. 此时光标在9 中文3 * 3个 = 9
f.flush()
f.tell() # 可以告诉我们当前光标的位置
f.close()
truncate()
# 截断 如果想做截断操作.要先挪动光标. 挪动到你想要截断的位置. 然后再进行截断关于truncate(n), 如果给出了n. 则从开头文件的首行首字节开始截断,截断文件为size个字节, 如果不给n, 则从当前位置截断. 后面的内容将会被删除
open()简写
with open('文件1',mode='模式',encoding='编码') as f,open('文件1',mode='模式',encoding='编码') as m:
# t(默认):读写都是以str字符串为单位,一定要指定encoding
# b:读写都是以bytes为单位,一定不能指定encoding参数
![image-20200716161242901](https://gitee.com/feiguoguomayun/picture.ceshi/raw/master/image-20200716161242901.png)