文件操作三大步骤

文件操作三大步骤

  • 打开文件
  • 增删改查
  • 关闭文件

打开文件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() 每次只读取一行,读取出来的数据后面都有带有\n,也就是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
posted @ 2020-07-16 16:15  feiguoguobokeyuan  阅读(769)  评论(0编辑  收藏  举报