【18】python之文件操作
文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
打开文件的模式有:
- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【不可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a,可读
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
文件操作
1 #文件读写 2 #文件写入 3 f = open("test.txt","a",encoding="utf-8")#文件句柄,内存对象 4 #data2=f.read()#按行读取,data2从最后一行读起 5 f.write("\n我爱北京天安门") 6 f.close() 7 #文件全部读取 8 g = open("test.txt","r",encoding="utf-8")#文件句柄,内存对象 9 data1=g.read() 10 print(data1) 11 g.close() 12 #文件读取前五行 13 a = open("test.txt","r",encoding="utf-8")#文件句柄,内存对象 14 for i in range(5): 15 print(a.readline().strip()) 16 a.close() 17 #文件不读取第十行 18 b = open("test.txt","r",encoding="utf-8")#文件句柄,内存对象 19 for index,j in enumerate(b.readlines()): 20 if index==9: 21 print("------------") 22 else: 23 print(j.strip()) 24 b.close() 25 #文件不读取第十行 26 count = 0 27 f = open("test.txt","r",encoding="utf-8")#文件句柄,内存对象 28 #迭代器 29 for m in f: 30 if count==9: 31 print("------------") 32 count=count+1 33 else: 34 print(m.strip()) 35 count = count + 1 36 b.close() 37 #光标 38 c = open("test.txt","r",encoding="utf-8")#文件句柄,内存对象 39 print(c.tell()) 40 print(c.readline()) 41 print(c.readline()) 42 print(c.readline()) 43 print(c.tell())#安字符计数 44 c.seek(10)#光标回到某个位置 45 print(c.tell())#安字符计数 46 print(c.encoding)#打印文件编码 47 print(c.flush())#强制刷新,将读取文件放到硬盘上 48 print(c.buffer)#缓存区 49 #c.truncate#清空 50 c.close()
with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
1 with open('log','r') as f:
如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:
1 with open('log1') as obj1, open('log2') as obj2:
文件修改
1 f = open("test1","r",encoding="utf-8") 2 f1 = open("test1.bak","w",encoding="utf-8") 3 4 for line in f: 5 if "等我享受" in line: 6 line=line.replace("等我享受","等me享受") 7 f1.write(line) 8 f.close() 9 f1.close()
1 import sys 2 3 with open("test1","r",encoding="utf-8") as f,\ 4 open("test1.bak","w",encoding="utf-8") as f1: 5 for line in f: 6 find_str = sys.argv[1] 7 replace_str = sys.argv[2] 8 if find_str in line: 9 line = line.replace(find_str, replace_str) 10 f1.write(line)