day03-文件操作
Posted 涅槃之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day03-文件操作相关的知识,希望对你有一定的参考价值。
1、对文件操作流程
- 打开文件,得到文件句柄赋值给一个变量
- 通过文件句柄,对文件进行操作
- 关闭文件
格式:
#获取文件句柄
f = open("yesterday","r",encoding="utf-8")
#读取数据
data = f.read()
#打印读取的文件
print(data)
#关闭文件
f.close()
2、read、readline、readlines对比
f.read()会读取文件的所有内容,光标也会移动到最后位置
f.readline()会读取文件的第一行,光标会移动到第一行最后位置
f.readlines()以列表的形式,显示整个文档,每行作为一个元素。光标也会移到最后
3、r读模式,仅仅只能读,读全部
1 #data = open("yesterday").read() 2 f = open("yesterday",\'r\') #文件句柄,包含文件的文件名,字符集,大小,在硬盘上的位置 3 data = f.read() #文件的读取是从第一行开始,会读取整个文件 4 data2= f.read() #再次读取时,是接着上次的读取结束位置 5 print(data) 6 print("----------------------------------") 7 print(data2) #此时没有读出内容 8 f.close()
#读取前五行
1 f = open("yesterday",\'r\') 2 for i in range(5): 3 print(f.readline()) #循环打印,比较占内存,效率低,因为readlines是读取整个文件 4 f.close()
#不打印第10行,readlines是以列表的形式,效率很低
1 f = open("yesterday",\'r\') 2 for index,line in enumerate(f.readlines()): 3 if index ==9: 4 print("-----------分割线------------") 5 continue 6 else: 7 print(line.strip()) #strip函数:去除字符串左右两边(首尾)的指定字符,默认指定字符为空白字符,如空格、回车/r,换行/n,制表符/t, 换页符/f; 8 f.close()
enumerate用法请点击
#循环打印,逐行,内存中实时读取一行。效率最高
1 f = open("yesterday",\'r\') 2 for line in f: 3 print(line) 4 f.close()
4、count计数器
#不打印第十行,通过count计数器
1 f = open("yesterday",\'r\') 2 count =0 3 for line in f: 4 if count==9: 5 print("-------------分割线-----------") 6 count +=1 7 continue 8 print(line) 9 count +=1
5、tell统计字符数
1 f = open("yesterday",\'r\') 2 print(f.tell()) #句柄指针的位置0 3 print(f.readline()) #读一行 4 print(f.tell()) #tell是按照字符计数
6、seek光标移动
1 f = open("yesterday",\'r\') 2 print(f.tell()) #当前句柄指针的位置0 3 print(f.read(5)) #只读取五个字符 4 print(f.tell()) #tell是按照字符计数 5 f.seek(0) #回到初始位置 6 print(f.tell()) #打印字符数
1 f.seek(2) 2 print(f.tell()) #把光标移回到第二个字符位置 3 print(f.seekable()) #判断是否能移动光标 4 5 print(f.encoding) #查看文件的字符集 6 7 print(f.fileno()) #返回文件句柄在内存中的编号 8 print(f.readable()) #判断文件是否可读
9 print(f.writable()) #判断文件是否可写
7、flush将内存数据写到硬盘
1 print(f.flush()) #将对文件的修改,从内存写入到硬盘(默认情况是缓存满了,再写入到硬盘)
8、打印进度条效果
1 #进度条效果 2 import sys,time 3 for i in range(50): 4 sys.stdout.write("#") 5 sys.stdout.flush() 6 time.sleep(0.1)
9、truncate截断字符
截取文件中的字符串,打开文件模式一定是追加模式(a),不能是写(w)和读(r)模式
1 f = open("yesterday2",\'a\') 2 f.seek(5) 3 f.truncate(6) #从头开始截断6个字符,即使移动光标也没有影响 4 f.close()
10、replace文件的修改
1 #文件的修改 2 f = open("yesterday",\'r\') 3 f_new = open("yesterday.bak",\'w\') 4 for line in f: #f文件变成了迭代器 5 if "肆意的快乐等我享受" in line: 6 line = line.replace("肆意的快乐等我享受","肆意的快乐等Alex享受") 7 f_new.write(line)
f.close()
f_new.close()
11、实现简单的shell sed替换功能
1 import sys 2 f = open("yesterday",\'r\') 3 f_new = open("yesterday.bak",\'w\') 4 find_str = sys.argv[1] 5 replace_str = sys.argv[2] 6 for line in f: #f文件变成了迭代器 7 if find_str in line: 8 line = line.replace(find_str,replace_str) 9 f_new.write(line) 10 f.close() 11 f_new.close()
12、w写模式,会将原有文件内容覆盖
1 #写模式,仅仅只能写 2 f = open("yesterday2",\'w\') #会将原有文件覆盖 3 f.write("我爱北京天安门,\\n") #文件的写入是从第一行开始 4 f.write("天安门上太阳升") #再次写入时,是追加在上次内容后面的 5 f.close()
13、a追加写模式,在原有内容后面追加
1 #追加写模式,仅仅只能写,不能读 2 f = open("yesterday2",\'a\') 3 f.write("\\n我爱北京天安门.............,\\n") #文件的写入是从第一行开始 4 f.write("天安门上太阳升.............") #再次写入时,是追加在上次内容后面的 5 print(f.read()) #会报错 6 f.close()
13、r+读写模式
1 #顺序读,但是写是在文件内容最后追加 2 f = open("yesterday2",\'r+\')#文件句柄,读写
14、w+写读模式
1 #先进行写,将原有内容覆盖,若继续写,则进行追加 2 f = open("yesterday2",\'w+\') #文件句柄,写读
15、a+追加写模式
1 #追加写,还是不能读,只是不会报错 2 f = open("yesterday2",\'a+\') # 3 f.write("\\n我爱北京天安门.............,\\n") #文件的写入是从第一行开始 4 f.write("天安门上太阳升.............") #再次写入时,是追加在上次内容后面的 5 print(f.read()) #没有显示,但不会报错 6 f.close()
16、wb以二进制编码写
1 f = open("yesterday2",\'wb\') #文件句柄,二进制文件 2 f.write("hello binary\\n".encode()) #默认将二进制编码模式转换成utf-8 3 f.close()
17、with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
1 with open("yesterday2",\'r\') as f: 2 for line in f: 3 print(line)
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:
1 with open("yesterday2",\'r\') as f1,open("yesterday.bak",\'r\') as f2: 2 for line in f1: 3 print(line) 4 for line in f2: 5 print(line)
格式清晰,使用 \\ 换行
1 with open("yesterday2",\'r\') as f1,\\ 2 open("yesterday.bak",\'r\') as f2: 3 for line in f1: 4 print(line) 5 for line in f2: 6 print(line)
当with代码块执行完毕时,内部会自动关闭并释放文件资源。
以上是关于day03-文件操作的主要内容,如果未能解决你的问题,请参考以下文章