博客地址:http://www.cnblogs.com/yudanqu/
一、读文件
要把大象装冰箱,需要分几步?对于读写文件也是这样简单的流程,打开文件、读取文件和关闭文件。
描述符:文件所有操作涉及到描述符,描述符就是一个光标,读取数据可以从光标开始向后依次读,等等。
1、打开文件
open(path, flag[, encoding][, errors])
- path:要打开文件的路径
- flag:打开方式
- r 以只读的方式打开文件,文件的描述符放在文件的开头
- rb 以二进制格式打开一个文件用于只读,文件的描述符放在文件的开头
- r+ 打开一个文件用于读写,文件的描述符放在文件的开头
- w 打开一个文件只用于写入,如果该文件已经存在会覆盖,不存在则创建新文件
- wb 打开一个文件只用于写入二进制,如果该文件已经存在会覆盖,不存在则创建新文件
- w+ 打开一个文件用于读写,如果该文件已经存在会覆盖,不存在则创建新文件
- a 打开一个文件用于追加如果文件存在,文件描述符将会放到文件末尾
- a+
- encoding:编码方式(一般utf-8)
- errors:错误处理(一般不处理)
1 # 小栗子 2 f = open(path, "r", encoding="utf-8", errors="ignore") 3 # ignore 忽略错误,一般不写后两个参数
2、读文件内容
1 # 读取文件全部内容 2 str1 = f.read() # 读文件比较小的,大的内存放不下 3 4 # 读取指定字符数(按字符数) 5 str2 = f.read(10) # 一个字母和一个汉字都称为一个字符 6 7 # 读取整行,包括" "字符 8 str3 = d.readline() 9 10 # 读取指定字符数 11 str4 = f.readline(10) 12 13 # 读取所有行并返回列表 14 str5 = f.readlines() 15 16 # 若给定的数字大于0,返回实际size字节的行数 17 str6 = f.readlines(25) # 例如25个字节,每行存10个,那么此时读取两行 18 19 # 修改描述符的位置 20 f.seek(10) # 改到第几个字符的位置
3、关闭文件
1 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可以把文件关闭的部分实现,不论我们是否操作,是否有错误,都会在最后帮我们把文件关闭,也避免了我们忘记关文件的困扰
二、写文件
1 f = open(path,"w") # 首先以写方式打开文件 2 3 # 将信息写入缓冲区,而并没有直接写入文件当中,也就是说我们在写文件时看文件中,没有信息随时写入 4 f.write("glabscufn") 5 6 # 刷新缓冲区(要想边写边存入文件的话可以手动刷新缓冲区) 7 f.flush() # 直接把内部缓冲区的数据立刻写入文件,而不是被动的等待文件关闭自动刷新缓冲区写入 8 9 ''' 10 缓冲区的刷新: 11 1、文件关闭自动刷新 12 2、手动flush刷新 13 3、缓冲区满了也可以自动刷新 14 4、再有就是遇到' '也会刷新 15 ''' 16 17 f.close()
三、编码与解码
1、编码
1 with open(path, "wb") as f1: 2 str = "asdasdasdasd" 3 f1.write(str.encode('utf-8')) # 用utf-8编码
2、 解码
1 with open(path, "rb") as f2: 2 data = f2.read() 3 new_data = data.decode("utf-8") 4 print(type(data)) # class<byte> 5 print(type(new_data)) # class<str> 6 # 主要是在有中文的情况下,其他情况不同的码可能也译码正确 7 # 如果是二进制的字符串,要记得编码解码
四、list,tuple,dict,set
1 import pickle # 数据持久性模块,就是把数据存到磁盘 2 3 # 写 4 mylist = [1,2,3,4,5,"sadd"] 5 f = open(path, "wb") 6 pickle.dump(mylist, f) 7 f.close() 8 9 # 读 10 f1 = open(path, "rb") 11 templist = pickle.load(f1) 12 print(templist) 13 f1.close()
作者:渔单渠(yudanqu)