文件操作
文件操作流程:
1.打开文件得到文件句柄并赋值变量
2.通过句柄对文件进行操作
3.关闭文件
打开的只是储存在计算机里的文件对象,必须赋值一个变量才能操作,变量通常用f表示,赋值f的文件对象也叫做文件句柄。
1 #!/usr/bin/env python 2 # -*- coding utf-8 -*- 3 # Author:qinjiaxi 4 f = open('hh','r',encoding = 'utf-8')#文件句柄 5 '''第一个参数是文件名,第二个是模式,第三个跟编码有关utf-8 6 1.r的是读是默认的模式 7 2.w是写要覆盖之前的内容这个要慎用 8 3.a是追加的意思在启动该模式写文件时不清空之前的文件内容,而是在后面追加内容 9 ''' 10 #读 11 data = f.read() 12 #写 13 data2 = f.write("hello") 14 #append追加 15 data3 = f.write('hh') 16 f.close() 17 '''需求: 18 读取文件前10行 19 ''' 20 #low loop 21 for index,line in enumerate(f.readlines()): 22 if index == 10: 23 print('----我是分割线-----') 24 continue 25 print(line.strip()) 26 #high loop 27 count = 0 28 for line in f: 29 if count == 10: 30 print('----我是分割线-----') 31 count += 1 32 continue 33 print(line.strip()) 34 count += 1
定义一个敏感词过滤器的函数
1 #!/user/bin/env python 2 #-*-coding:utf-8 -*- 3 #Author: qinjiaxi 4 def text_create(name, msg): 5 path ="C:\Users\Administrator\Desktop\" 6 file = path + name + ".txt" 7 text = open(file, 'w') 8 text.write(msg) 9 text.close() 10 # text_create('1111', 'hello world') 11 def fiter(word, content = 'lame', p = 'Awesome'): 12 return word.replace(content, p) 13 def censored_text(name, msg): 14 clean_msg = fiter(msg) 15 text_create(name, clean_msg) 16 censored_text('Try', 'lame!lame!lame!')
句柄操作及缓冲进度模拟
1 '''句柄操作''' 2 f.tell()#打印当前光标位置 3 f.seek()#默认回到起始位置0,括号里面可以带数字 4 f.encoding#打印文件的编码方式 5 f.flush()#强制将缓存的内容刷新到硬盘(缓存中有大小,默认当写入内容达到内容大小的时候才会刷新到硬盘中) 6 f.truncate()#括号中不写清空文件;括号中带数字n表示从开头截取n个字符 7 8 ''' 9 r+:读写追加到后面(用的最多) 10 w+:写读,清除内容写(平时用的少基本不会用) 11 a+:追加读(基本不用) 12 rb:二进制方式读,此模式用在网络传输中,python3中只能用二进制进行,python2可以用字符和二进制格式 13 二进制是指用二进制编码的而不是0101的格式 14 wb:以二进制的方式写入,字符串转为二进制需要编码----str.encode() 15 ''' 16 '''模拟进度行缓冲效果''' 17 import sys,time 18 f = open('hh','w',encoding = 'utf-8') 19 for i in range(20): 20 sys.stdout.write('#') 21 time.sleep(0.1) 22 sys.stdout.flush()#强制刷新缓冲 23 #注:print打印是默认换行的,stdout是标准输出、stdout是标准输入,这个标准输入和输出是指往屏幕上输
文件修改
思路:打开两个文件句柄,第一个以读的模式打开,第二个以写的模式打开,然后循环每行,再判断需要修改的内容,写入每行,直接贴源码:
1 f = open('hh', 'r', encoding='utf-8') 2 f_new = open('hh.bak', 'w', encoding='utf-8') 3 for line in f: 4 if line == '我的名字叫秦朗': 5 # if '我的名字叫秦朗' in line: 6 line = line.replace('我的名字叫秦朗','我的名字叫秦家喜') 7 f_new.write(line) 8 f.close() 9 f_new.close()