Python基础(三)文件基本操作
一、Python文件操作
1、对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
现有文件如下: 怎么红烧白鲢
1、一条处理干净,洗干净的白鲢鱼。 2、因为大所以剁成小块。 3、准备作料,大葱切断,姜切片,酱油适量,醋可以多放点,白糖一点。盐适量。 4、锅里放油,放入3大勺白糖炒颜色,颜色发红色就可以了,中间要不停的搅动。 5、糖色红色就把鱼放进,翻炒均匀上色,然后把调好的作料倒入进去在翻炒一下。 6、糖色红色就把鱼放进,翻炒均匀上色,然后把调好的作料倒入进去在翻炒一下。 7、装入盘中就可以开吃了。
1 """ 2 注意 if in the win,hello文件是utf8保存的,打开文件时open函数是通过操作系统打开的文件,而win操作系统 3 默认的是gbk编码,所以直接打开会乱码,需要f=open('hello',encoding='utf8'),hello文件如果是gbk保存的,则直接打开即可。 4 """ 5 """ 6 如果不加encoding='utf-8' 7 默认的话是如果是win环境f = open('文件2','r') 就是 f = open('文件2','r',encoding='gbk') 8 # 打开一个文件,使用utf-8编码,文件是bytes类型。py编译器会为我们decode成unicode 9 """ 10 f = open('文件2','r',encoding='utf-8') 11 # data = f.read(5) # 1、一条处 ---> 获取5个字符 12 # data = f.readline() # 1、一条处理干净,洗干净的白鲢鱼。 ---> 获取一行内容 13 # data = f.readlines() # ['1、一条处理干净,洗干净的白鲢鱼。\n', '2、因为大所以剁成小块。\n', '3、准备作料,大葱切断,姜切片,酱油适量,醋可以多放点,白糖一点。盐适量。\n', '4、锅里放油,放入3大勺白糖炒颜色,颜色发红色就可以了,中间要不停的搅动。\n', '5、糖色红色就把鱼放进,翻炒均匀上色,然后把调好的作料倒入进去在翻炒一下。\n', '6、糖色红色就把鱼放进,翻炒均匀上色,然后把调好的作料倒入进去在翻炒一下。\n', '7、装入盘中就可以开吃了。'] 14 15 print(data) 16 f.close()
2、文件打开模式
'r' open for reading (default) 只读模式 'w' open for writing, truncating the file first 只可写 'x' create a new file and open it for writing 'a' open for writing, appending to the end of the file if it exists 追加模式 'b' binary mode 't' text mode (default) '+' open a disk file for updating (reading and writing) 'U' universal newline mode (deprecated)
三种比较常用的模式介绍
1 # 如果不加encoding='utf-8' win下默认是gbk 2 with open('文件3','w',encoding='utf-8') as f: # w模式没有文件,则新建,有文件则覆盖重新创建一个文件。只能写,不可读 3 f.write('满江红') 4 with open('文件3','a',encoding='utf-8') as f: # a模式追加文件内容,没有文件则创建文件,有文件则在文件最后追加内容,不可读 5 f.write('\n岳飞') 6 with open('文件3','r',encoding='utf-8') as f: # r模式只读模式,只能读,不可写 7 data = f.readlines() 8 print(data)
打印文件指定内容:
1 # 打印文件第6行内容 2 # 第一种方法: 不推荐 3 with open('文件','r',encoding='utf-8') as f: 4 number = 0 5 for line in f.readlines(): # 这里的f.readlines() 严重不建议使用,因为会把整个文件读进内存 6 number+=1 7 if number == 6: 8 print(line.strap()) 9 # 推荐使用第二种方法 10 with open('文件','r',encoding='utf-8') as f: 11 number=0 12 for line in f: # 这是for内部将f对象做成一个迭代器,用一行去一行。 13 number+=1 14 if number == 6: 15 print(line.strap())
1 print(f.tell())# 取出光标位置 2 f.seek(0)# 移动光标到指定的位置 3 flush():同步将数据从缓存转移到磁盘上去
进度条实例:
1 # 进度条实例 2 import sys,time 3 for i in range(30): 4 sys.stdout.write('#') 5 sys.stdout.flush() 6 time.sleep(0.2) 7 8 import sys,time 9 for i in range(30): 10 print('=',end='',flush=True) # end=''表示不换行 11 time.sleep(0.3)
截断数据:
1 #truncate():截断数据(不能在r模式下) 2 # 在w模式下:先清空,再写,再截断 3 # 在a模式下:直接将指定位置后的内容截断 4 f.truncate(5) 5 f.write('hello world') 6 f.truncate(5) 7 f.close()
# r+:光标默认在0位置,最后位置开始写
# w+:先清空,再写读
# a+:光标默认在最后位置
1 with open('文件','r+',encoding='utf-8') as f: 2 data = f.readline() # 从起始位置开始读 3 print(data) 4 f.write('增加内容') # 从最后位置开始写
修改磁盘文件:
1 # 终极问题 如何在磁盘修改文件 2 # 常规思路,由于磁盘存储机制不能完成 3 with open('文件','r+',encoding='utf-8') as f: 4 number=0 5 for line in f: 6 number+=1 7 if number==3: 8 f.write('新增内容') # 内容会被增加到最后,所以此种方法无效,因为和r+的模式有关系 9 10 with open('文件','r',encoding='utf-8') as f_read,open('文件4','w',encoding='utf-8') as f_write: 11 number = 0 12 for line in f_read: 13 number+=1 14 if number == 3: 15 line = ''.join(['第三行新增内容',line]) 16 f_write.write(line)
rb模式以及seek
在py2中1 #昨夜寒蛩不住鸣. 2 3 f = open('test','rb',) #以写读模式打开文件 4 5 f.read(3) 6 7 # f.seek(3) 8 # print f.read(3) # 夜 9 10 # f.seek(3,1) 11 # print f.read(3) # 寒 12 13 # f.seek(-4,2) 14 # print f.read(3) # 鸣
在py3中
1 # test: 2 昨夜寒蛩不住鸣. 3 4 f = open('test','rb',) #以写读模式打开文件 5 6 f.read(3) 7 8 # f.seek(3) 9 # print(f.read(3)) # b'\xe5\xa4\x9c' 10 11 # f.seek(3,1) 12 # print(f.read(3)) # b'\xe5\xaf\x92' 13 14 # f.seek(-4,2) 15 # print(f.read(3)) # b'\xe9\xb8\xa3' 16 17 #总结: 在py3中,如果你想要字符数据,即用于观看的,则用r模式,这样我f.read到的数据是一个经过decode的 18 # unicode数据; 但是如果这个数据我并不需要看,而只是用于传输,比如文件上传,那么我并不需要decode 19 # 直接传送bytes就好了,所以这个时候用rb模式. 20 21 # 在py3中,有一条严格的线区分着bytes和unicode,比如seek的用法,在py2和py3里都是一个个字节的seek, 22 # 但在py3里你就必须声明好了f的类型是rb,不允许再模糊. 23 24 #建议: 以后再读写文件的时候直接用rb模式,需要decode的时候仔显示地去解码.
生活不会突变,你要做的只是耐心和积累。人这一辈子没法做太多的事情,所以每一件都要做得精彩绝伦。你的时间有限,做喜欢的事情会令人愉悦,所以跟随自己的本心。
浙公网安备 33010602011771号