作者:小田
来源:小田学Python
文件操作在编程中是非常常见的,因此这点还是有必要熟悉掌握的。
读文件
要把大象装冰箱,需要分几步?对于读写文件也是这样简单的流程,打开文件、读取文件和关闭文件。
描述符:文件所有操作涉及到描述符,描述符就是一个光标,读取数据可以从光标开始向后依次读,等等。
1、打开文件
open(path, flag[, encoding][, errors])
path:要打开文件的路径
flag:打开方式
r 以只读的方式打开文件,文件的描述符放在文件的开头
rb 以二进制格式打开一个文件用于只读,文件的描述符放在文件的开头
r+ 打开一个文件用于读写,文件的描述符放在文件的开头
w 打开一个文件只用于写入,如果该文件已经存在会覆盖,不存在则创建新文件
wb 打开一个文件只用于写入二进制,如果该文件已经存在会覆盖,不存在则创建新文件
w+ 打开一个文件用于读写,如果该文件已经存在会覆盖,不存在则创建新文件
a 打开一个文件用于追加如果文件存在,文件描述符将会放到文件末尾
a+
encoding:编码方式(一般utf-8)
errors:错误处理(一般不处理)
# 小栗子
f = open(path, "r", encoding="utf-8", errors="ignore")
# ignore 忽略错误,一般不写后两个参数
2、读文件内容
# 读取文件全部内容
str1 = f.read() # 读文件比较小的,大的内存放不下
# 读取指定字符数(按字符数)
str2 = f.read(10) # 一个字母和一个汉字都称为一个字符
# 读取整行,包括"\n"字符
str3 = d.readline()
# 读取指定字符数
str4 = f.readline(10)
# 读取所有行并返回列表
str5 = f.readlines()
# 若给定的数字大于0,返回实际size字节的行数
str6 = f.readlines(25) # 例如25个字节,每行存10个,那么此时读取两行
# 修改描述符的位置
f.seek(10) # 改到第几个字符的位置
3、关闭文件
f.close()
4、小栗子
# 一个完整的过程
try:
f1.open(path, "r", encoding="utf-8")
print(f1.read())
finally:
if f1:
f1.close()
# try...except...else...finally是异常处理的内容,
# 这个例子用到的部分表示,如果打开读取文件部分出错,
# 只要文件存在那么就在最后把文件关闭,这是一个很好的
# 习惯,就比如说在Linux操作系统中,限制打开的文件数
# 不超过1024个如果超过了,文件就打不开
但是仅此,写文件比较繁杂,还有更方便的方法。
# 简单方法:
with open(path, "r", encoding="utf-8") as f2:
print(f2.read())
# with可以把文件关闭的部分实现,不论我们是否操作,
# 是否有错误,都会在最后帮我们把文件关闭,也避免
# 了我们忘记关文件的困扰
写文件
f = open(path,"w") # 首先以写方式打开文件
# 将信息写入缓冲区,而并没有直接写入文件当中,也就是说我们在写文件时看文件中,没有信息随时写入
f.write("glabscufn")
# 刷新缓冲区(要想边写边存入文件的话可以手动刷新缓冲区)
f.flush() # 直接把内部缓冲区的数据立刻写入文件,而不是被动的等待文件关闭自动刷新缓冲区写入
'''
缓冲区的刷新:
1、文件关闭自动刷新
2、手动flush刷新
3、缓冲区满了也可以自动刷新
4、再有就是遇到'\n'也会刷新
'''
f.close()
编码与解码
1、编码
with open(path, "wb") as f1:
str = "asdasdasdasd"
f1.write(str.encode('utf-8')) # 用utf-8编码
2、解码
with open(path, "rb") as f2:
data = f2.read()
new_data = data.decode("utf-8")
print(type(data)) # class<byte>
print(type(new_data)) # class<str>
# 主要是在有中文的情况下,其他情况不同的码可能也译码正确
# 如果是二进制的字符串,要记得编码解码
list\tuple\dict\set
import pickle # 数据持久性模块,就是把数据存到磁盘
# 写
mylist = [1,2,3,4,5,"sadd"]
f = open(path, "wb")
pickle.dump(mylist, f)
f.close()
# 读
f1 = open(path, "rb")
templist = pickle.load(f1)
print(templist)
f1.close()
◆ ◆ ◆ ◆ ◆
长按二维码关注我们
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢
● 笑死人不偿命的知乎沙雕问题排行榜● 用Python扒出B站那些“惊为天人”的阿婆主!● 互联网大佬学历&背景大揭秘,看看是你的老乡还是校友● 上万条数据撕开微博热搜的真相!● 你相信逛B站也能学编程吗?