文件操作

初识文件操作

  我们使用open函数打开文件,获取到文件句柄,通过文件句柄就可以进行各种各样的操作。

只读操作(r,rb)

f = open("歌姬",mode="r",encoding="utf-8")
s = f.read()
f.close() # 关闭句柄
print(s)

mode表示的是文件的操作类型,encoding表示编码集(可以不写,默认utf-8)

rb读取出来的数据是bytes类型的,在rb模式下,不能选择编码集。

rb作用:可以读取非文字对象的数据。

读取文件的方法

  read()  一次性全部读取,占内存,如果文件过大,内存会崩溃,不推荐

  read(n)读取n个字符,如果再次读取,会从当前位置继续读。如果使用rb模式,则读取的是n个字节

  readline()一次读取一行数据,末尾会有个n,使用strip()或者切片来去掉

  readlines()将每一行形成一个元素,放到一个列表,所以读取出来的是个列表。容易出现内存崩溃。

  for line in f:  循环读取,每次读取一行内容,不会产生内存溢出的现象。

读取完的文件句柄一定要关闭 f.close()

写模式(w, wb)

写的时候注意,如果没有创建文件,则创建文件,如果已经创建文件,则会清空这个文件,然后写入新内容。

追加(a, ab)

  只要是a或者ab,a+都是在文件的末尾写入新内容,不论光标在任何位置。

读写模式(r+,r+b)

  必须是先读,后写。

1 f = open("⼩小娃娃", mode="r+", encoding="utf-8")
2 content = f.read() 
3 f.write("麻花藤的最爱") 
4 print(content) 
5 f.flush() #刷新
6 f.close() 结果: 正常的读取之后, 写在结尾

写读模式(w+,w+b)

  先将所有内容清空 ,然后写入,最后读取。

f = open("⼩小娃娃", mode="w+", encoding="utf-8") 
f.write("哈哈") 
content = f.read() 
print(content) 
f.flush() 
f.close()

其他相关操作

  1.seek(n)操作:光标移动到n位置。移动的单位是bytes,所以UTF-8的中文必须是3的倍数。

    移动到开头:seek(0)

    移动到结尾:seek(0,2)seek的第⼆二个参数表⽰示的是从哪个位置进⾏行行偏移, 默认是0, 表 ⽰示开头, 1表⽰示当前位置, 2表⽰示结尾 

    tell() 使⽤用tell()可以帮我们获取到当前光标在什什么位置

    truncate() 截断文件 ,删除光标后面的所有内容。一般和seek搭配应用。

     深坑请注意: 在r+模式下. 如果读取了了内容. 不论读取内容多少. 光标显⽰示的是多少. 再写入 或者操作文件的时候都是在结尾进行的操作.所以如果想做截断操作. 记住了. 要先挪动光标. 挪动到你想要截断的位置. 然后再进行截断 关于truncate(n), 如果给出了了n. 则从开头进⾏截断, 如果不给n, 则从当前位置截断. 后⾯ 的内容将会被删除

修改文件以及另一种打开文件的操作

import os
# 创建新文件用来保存修改后的内容
with open("sb","r+") as f,
        open("sb_new","w") as f2:
    for line in f:
        new_comment = line.replace("alex","sb")
        f2.write(new_comment)
os.remove("sb")
# 将新文件重命名成要修改的文件名,相当于对这个文件进行了修改.
os.rename("sb_new","sb")

不需要关闭句柄。

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!