python基础:第三篇文件打开
一、文件打开操作
1.Python开发文件函数介绍
Python2中:open、file这两个函数用法一样。
Python3中:只有open函数。
2.打开文件操作流程
第一,打开文件得到文件对象。f=open('a.txt','w')
第二,通过文件对象操作文件(增删改查)。f.write('111111\n')
第三,关闭文件对象(clse)。 f.close()
f = open('a.txt') #如果不加读或者写参数默认是读 first_line = f.readline() print(first_line)
f.close()
3.文件编码格式
如果不指定文件的打开编码encoding使用系统默认的编码格式windows是gbk,linux是utf-8
4.文件的几种打开模式
1.单一模式
- r ,只读模式:默认模式不加默认是r模式
- w,只写模式:写模式,清空文件内容并重写写入
- x, 只写模式:不可读;不存在则创建,存在则报错
- a, 追加模式:可读, 不存在则创建;存在则只追加内容
2.两种模式
"+" 表示可以同时读写某个文件
- r+, 读写:可读,可写
- w+,写读:可读,可写
- x+ ,写读:可读,可写
- a+, 写读:可读,可写
3.以字节的方式打来文件
- rb 或 r+b
- wb 或 w+b
- xb 或 w+b
- ab 或 a+b
二、文件打开函数
open(“文件”,“模式”,“编码”)
f = open('a.txt', encoding='utf-8', mode='r')
open参数
- encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk;
- mode文件打开模式,r、w、a为打开文件的基本模式,对应着只读、只写、追加模式;
三、操作
1.常用
读文档数据操作
f=open('a.txt','w') f.write('111111\n') f.close()
读文档操作
f=open('a.txt','r') f.read('111111\n') f.close()
一次读取多个文件
with open('a.txt','r',encoding='utf-8') as f,open('b.txt') as b_f: print(f.read()) print('====>')
上下文管理
with open('a.txt','r') as read_f,open('b.txt','w') as write_f: data=read_f.read()#先读出b文件内容 write_f.write(data)#在写入a文件
补充重要小知识点循环后边else用法
当循成功完成不被打断才会运行else内容
#for循环
for i in range(3): print(i) # continue if i == 1: break else: print('=============>') #当for循环不被break打断,就会执行else的代码
#while循环
i=0
while i< 5:
print(i)
i+=1
if i == 3:
break
else:
print('------>')
应用场景实例
with open('a.txt','r',encoding='utf-8') as read_f,\ open('aa.txt','w',encoding='utf-8') as write_f: for line in read_f: write_f.write(line) else: print('write successfull')
f.close() # print(f.closed) #判断文件是否是关闭状态
# print(f.readable()) #判断文件是否是r模式打开的
# print(f.readline(),end='') #一次读一行
# print(f.readline())
# print(f.readline(),end='')
# print(f.readlines()) #读取所有行的内容,存成列表的形式
# f=open('a.txt','w',encoding='utf-8')
# # f=open('b.txt','r',encoding='utf-8') #以读的方式打开文件,文件不存在则报错
# f=open('b.txt','w',encoding='utf-8')
# # print(f.writable())
文件修改
#!/usr/bin/Python # -*- coding:utf-8 -*- import os with open("a.txt","r",encoding="utf-8") as read_f,\ open("a.txt.awp","w",encoding="utf-8") as w_f: for line in read_f: print(line) # if line.startswith("11"): line = "1\n" w_f.write(line) os.remove("a.txt") os.rename("a.txt.awp","a.txt")
光标位置
# with open('b.txt','rb') as f: # f.read() # f.seek(3) #默认情况,是以文件起始位置作为开始,往后移动3个bytes # f.read(1) # print(f.tell()) # f.seek(2,1) #1 代表以当前光标所在的位置为开始,往后移动2个 bytes # print(f.tell()) # f.seek(-1,2) #2表以当前光标所在的位置为开始,往后移动2个 bytes # print(f.tell()) # f.seek(0,2)
# tail -f access.log import time with open('access.log','r',encoding='utf-8') as f: f.seek(0,2) while True: line=f.readline().strip() if line: print('新增一行日志',line) time.sleep(0.5)
以二进制方式读取
#以二进制方式读 with open('a.txt','rb') as f: print(f.read().dncode('utf-8'))#需要将二进制转换 #以二进制方式写 with open('c.txt','wb') as f: f.write('哈哈哈'.encode('utf-8'))
f=open('sb.jpg','r',encoding='utf-8') #文本的方式读不了二进制文件
print(f.read())
应用:复制照片文件
# with open('sb.jpg','rb') as read_f,\ # open('sb_alex.jpg','wb') as write_f: # data=read_f.read() # write_f.write(data)
不常用的功能
# with open('a.txt','r',encoding='utf-8') as f: # print(f.read(4)) #数字指的是读的是字符 # # with open('a.txt','rb') as f: # print(f.read(1)) #数字指的是读的是字符 # with open('a.txt','r',encoding='utf-8') as f: # f.seek(3) #seek内指定的数字代表字节 # print(f.tell()) #当前光标所在的位置 # print(f.read()) # with open('aa.txt','r+',encoding='utf-8') as f: # # f.seek(3) #seek内指定的数字代表字节 # # print(f.read()) # # f.truncate(1) # with open('b.txt','rb') as f: # f.read() # f.seek(3) #默认情况,是以文件起始位置作为开始,往后移动3个bytes # f.read(1) # print(f.tell()) # f.seek(2,1) #1 代表以当前光标所在的位置为开始,往后移动2个 bytes # print(f.tell()) # f.seek(-1,2) #2表以当前光标所在的位置为开始,往后移动2个 bytes # print(f.tell()) # f.seek(0,2) # with open('c.txt','r',encoding='utf-8') as f: # f.seek(0,2) # print('====>',f.read())