文件读写介绍
在Python中,通过打开文件生成一个文件对象【文件描述符】操作磁盘上的文件,操作主要由文件读写
步骤:
1.打开文件(和缓冲区建立联系)
2.文件读写(把数据写到缓冲区或从缓冲区读取数据)
3.关闭文件(把缓冲区的数据写到磁盘上或把磁盘上的数据读到缓冲区,并断开和磁盘的联系)
格式:
f=open('文件名','打开方式','其他可选项',...)#打开文件
f.read()或f.write()#文件读写
f.close()#关闭文件
缓冲区:
程序写-->缓冲区-->磁盘
程序读<--缓冲区<--磁盘
通过文件描述符操控
打开文件
打开文件的格式:
open('文件名','打开方式')
打开方式有:
r 只读方式打开文件,从文件开头开始读,默认方式
w 只写方式打开文件,如果文件存在,就覆盖,如果不存在就创建文件
a 打开文件进行追加,写的内容会从原内容的最后开始添加,如果文件不存在,会创建文件
rb 二进制格式只读方式打开文件,从文件开头开始读,读出的是二进制
wb 二进制格式只写方式打开文件,如果文件存在,就覆盖,如果不存在就创建文件
ab 二进制格式打开文件进行追加,写的内容会从原内容的最后开始添加,如果文件不存在,会创建文件
r+ 读写模式打开文件,从文件开头开始读写
w+ 读写模式打开文件,从文件开头开始读写,如果文件存在,就覆盖,如果不存在就创建文件
a+ 读写模式打开文件,从原文件的尾部开始,如果文件存在,就覆盖,如果不存在就创建文件
rb+ 二进制格式读写模式打开文件,从文件开头开始读写
wb+ 二进制格式读写模式打开文件,从文件开头开始读写,如果文件存在,就覆盖,如果不存在就创建文件
ab+ 二进制格式读写模式打开文件,从原文件的尾部开始,如果文件存在,就覆盖,如果不存在就创建文件
案例:通过代码在磁盘上创建10个后缀为.txt的文件,文件名是1-10
for i in range(1,11):
f=open('%d.txt'%i,'w')
写文件
操作步骤
1.打开文件:f=open('文件名','w')
2.写文件:f.write()/f.writelines()
3.刷新缓冲区:flush()--可写可不写
4.关闭文件:f.close()
说明:
1.write()函数需要传递一个字符串做为参数,不然报错
2.writelines()函数可以传入字符串,也可以传入字符序列,并将字符序列写入文件
格式一:
f=open("1.txt","w")
f.write("hello world")#默认是不换行
f.close()
格式二:
with open('1.txt','w') as f:
f.write("11111")
f.close()
#中文乱码问题 encoding='utf8'
with open('file/3.txt','w',encoding='utf8') as f2:
f2.write('中文')
f2.close()
#案例:把自己的名字,年龄,性别,电话写入一个1.txt文件,每个属性一行
f=open('1.txt','w',encoding='utf8')
f.writelines(['张三\n','19\n','男\n','13833445566'])
f.close()
#案例:把1-100数字写入2.txt文件中,每行一个数字、
f=open('2.txt','w')
i=1
while i<=100:
f.writelines([str(i)+"\n"])
i+=1
f.close()
读文件
操作步骤:
1.打开文件:open(),如果文件不存在,就报错
2.读文件:read()
3.关闭文件
注意:如果读的数据有中文,也要加encoding='utf8'
注意:文件读时,有游标问题,要注意
格式一:
f=open("文件名",'r')
f.read()#读所有的行,返回的是字符串
f.readline()#读首行,返回的是字符串
f.readlines()#读所有行,返回的是列表,带\n
f.read().splitlines()##读所有行,返回的是列表,不带\n
f.close()
格式二:
with open("文件名","r") as f:
f.read()
...
f.close()
案例:如何定义一个读txt文件的方法,并将读到的所有行内容返回并循环打印;
def readfunc(a,b):
with open(a,b)as f:
mystr=f.read().splitlines()
return mystr
mystr2=readfunc('2.txt','r')
for i in mystr2:
print(i)
读写图片,音频,视频
读写图片,音频,视频要用二进制方式打开文件
#案例,请设计一个通用的,可以复制后缀为.jpg,.png,.mp3,.mp4格式的函数
def mycopypng(a,b):
f =open(a,'rb')
mystr = f.read()
f.close()
print(mystr)
# 写
f =open(b,'wb')
f.write(mystr)
f.close()
mycopypng('资源/mov.mp4','资源/mov2.mp4')
CSV文件读写
1.csv是一种文件格式,csv本质上是一个纯文本文件,可以作为不同程序之间的数据交互格式
2.读写csv格式的文件,需要导入csv模块
3.默认写数据会有空行,需要在open函数参数中添加newline=''
4.使用writerow来写入数据
#案例:把下面内容写入到CSV文件中
学号 姓名 性别 班级 英语 数学 语文
1 张飞 男 2 90 99 99
2 马超 男 3 80 90 98
3 关羽 男 1 99 80 95
4 黄忠 男 2 85 99 97
5 赵云 男 1 95 85 96
with open('资源/2.csv','w',encoding='utf8',newline='')as f:
obj = csv.writer(f)# 将文件描述符对象转换为csv的对象
obj.writerow(['学号','姓名',' 性别','班级',' 英语','数学','语文'])
obj.writerow(['1 ','张飞 ',' 男',' 2 ',' 90',' 99',' 99'])
obj.writerow(['2 ',' 马超 ',' 男',' 3 ',' 80',' 90',' 98'])
XML文件读
XML:可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言
要引入import xml.etree.ElementTree as ET
xml.etree.ElementTree取别名叫ET
if __name__ == '__main__'的意思是:当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。
案例:读取xml文件中用户名和密码
def read_xml(path,node_name):
datas=[]
tree=ET.parse(path)#打开ximl文件
root=tree.getroot()#获取根结点config结点
#root.iter(子节点名字),该函数是获取子节点
for iin root.iter(node_name):#有可能根节点下有很多个node_name节点,所以这里使用循环
datas.append(i.text)#获取子节点的内容并存储到列表中
return datas
name=read_xml('资源/a.xml','username')
print(name)
password=read_xml('资源/a.xml','password')
print(password)
EXCEL文件读
Excel文件:包含xls和xlsx两种格式,读的方式一模一样,只是文件后缀名不一致
# pip install xlrd 要下载xlrd模块,pycharm下面终端输入,管理员身份打开pycharm
要引入import xlrd