版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模块8
文件操作1文件的类型2按文件中数据的组织形式可以把文件分文本文件和二进制文件。文本文件:文本文件是指由单一特定编码如ASCII码方式(也称文本方式)存储的文件,文本文件存储的是常规字符串,由若干文本行组成,最后一行后放置文件结束标志来指明文件的结束。通常每行以换行符"\n"结尾。常规字符串是指记事本或其他文本编辑器能正常显示,编辑并且能够直接阅读和理解的字符串,如英文、汉字、数字字符串。.txt、.py等文件属于文本文件。二进制文件:二进制文件把对象内容以比特0和1进行存储,没有统一的字符编码,无法用记事本或其他普通字处理软件直接进行编辑,通常也无法被人类直接阅读和理解,需要使用专门的软件进行解码后读取、显示、修改或执行。.png、.avi等文件属于二进制文件。8.1文件读写操作8.1.1打开文件open()函数打开指定文件或创建文件对象,语法格式如下:
文件对象名=open(文件名,[打开方式])文件名包含文件路径和名称,如果文件和源文件在同一个目录下,可以省略目录。打开方式主要是说明打开的文件类型是文本文件还是二进制文件,打开文件后要进行读操作还是写操作。38.1文件读写操作8.1.1打开文件4【例题8-1】文本文件abc.txt中保存着内容“我爱我的祖国”,读出文件里的内容并输出。#以文本形式打开文件f=open("abc.txt","rt")print(f.readline())f.close()
【运行结果】我爱我的祖国
#以二进制形式打开文件f=open("abc.txt","rb")print(f.readline())f.close()
【运行结果】b'\xce\xd2\xb0\xae\xce\xd2\xb5\xc4\xd7\xe6\xb9\xfa'8.1文件读写操作8.1.3读文本文件<file>.read():一次读取文件所有内容,返回一个字符串或字节流。<file>.readline():每次只读取一行内容。<file>.readlines():一次读取文件所有内容,按行返回一个列表。【例题8-3】文本文件cj.txt中保存着内容唐诗“村居”,读出文件里的内容并输出。5#方法1:一次读取文件所有内容fname=input("请输入要打开的文件名称:")f=open(fname,"r")txt=f.read()print("读取文件内容成功\n:",txt)f.close()#方法2:一次性读取所有行,逐行遍历文件内容fname=input("请输入要打开的文件名称:")f=open(fname,"r")forlineinf.readlines():print(line)f.close()8.1文件读写操作8.1.2关闭文件close()函数是专门用来关闭已打开文件的,语法格式如下:file.close()其中,file表示已打开的文件对象。文件在打开并操作完成之后,应该及时关闭,否则程序的运行可能出现问题。6importosf=open("abc.txt","r")f.close()os.remove("abc.txt")print("abc.txt删除成功!")
【运行结果】abc.txt删除成功!
importosf=open("abc.txt","r")os.remove("abc.txt")print("abc.txt删除成功!")
【运行结果】Traceback(mostrecentcalllast):File"E:/2020上/python/demo8-2.py",line4,in<module>os.remove("abc.txt")PermissionError:[WinError32]另一个程序正在使用此文件,进程无法访问。:'abc.txt'
8.1文件读写操作8.1.3读文本文件【例题8-3】文本文件cj.txt中保存着内容唐诗“村居”,读出文件里的内容并输出。7#方法2:一次性读取所有行,逐行遍历文件内容fname=input("请输入要打开的文件名称:")f=open(fname,"r")forlineinf.readlines():print(line)f.close()8.1文件读写操作8.1.4写文本文件<file>.write(s):用于向文件中写入指定字符串或字节流。<file>.
writelines(lines)
:用于将一个元素全为字符串的列表写入文件中。【例题8-4】文本文件abc.txt中写入内容。8str=input("请输入要写入文件的字符串:")f=open("abc.txt","a")f.write(str)print("写入成功")f.close()【运行结果】请输入要写入文件的字符串:helloworld!写入成功
str=input("请输入要写入文件的字符串:")f=open("abc.txt","w")f.write(str)print("写入成功")f.close()【运行结果】请输入要写入文件的字符串:helloworld!写入成功
8.1文件读写操作8.1.5读写二进制文件二进制文件中都是一个一个的字节数据,如音频、视频、图片等都是二进制文件,二进制文件的读和写是针对字节数据的,需要采用二进制的读取方法。如果二进制文件不采用二进制读取方式,就会显示乱码,如用记事本打开一张图片,显示结果如下图所示:98.1文件读写操作1.使用struct模块对二进制进行读写struct模块中最重要的三个方法是pack(),unpack(),calcsize()。string=struct.pack(fmt,v1,v2,...):按照给定的格式化字符串,把数据封装成字符串;tuple=unpack(fmt,string):按照给定的格式(fmt)解析字节流string,返回解析出来的tuple;offset=calcsize(fmt):计算给定的格式(fmt)占用多少字节的内存。108.1文件读写操作【例题8-5】使用struct模块将一个整数和一个字符串写入xy.dat。importstructm=int(input("请输入一个整数:"))s=input("请输入一个字符串:")#序列化n=struct.pack('i',m)f=open('xy.dat','wb')f.write(n)#字符串需要编码为字节串再写入文件f.write(s.encode())f.close()118.1文件读写操作【例题8-6】使用struct模块将例题8-5中写入的二进制数据读出。importstructf=open('xy.dat','rb')#读取一个整数的长度n=f.read(4)#反序列化m=struct.unpack('i',n)print("m=",m)#读取字符串good的长度s=f.read(4)#字符串解码s=s.decode()print("s=",s)128.1文件读写操作2.
使用pickle模块对二进制进行读写pickle是系统标准库所提供的二进制IO模块,是压缩、保存、提取文件的模块,字典和列表都是能被保存的。struct模块中最重要的两个方法是:dump(obj,file):序列化对象。将对象obj保存到文件file中去,file表示保存到的类文件对象。load(infile):反序列化对象,将文件中的数据解析为一个python对象。138.1文件读写操作【例题8-7】使用pickle模块向dida.dat中写入整型和列表类型的Python数据对象。14importpicklefo=open('dida.dat','wb')n=7lst=[[20,30,40],[50,60,70]]try:pickle.dump(n,fo)pickle.dump(lst,fo)print("数据写入成功")except:print("写文件异常")finally:fo.close()8.1文件读写操作【例题8-8】使用pickle模块将例题8-7中写入的二进制数据读出。15importpicklefi=open('dida.dat','rb')#读出文件的数据个数try:withopen('dida.dat','rb')asfi:whileTrue:print(pickle.load(fi))exceptEOFError:fi.close()8.1文件读写操作3.使用marshal模块对二进制进行读写marshal模块与pickle模块一样,也有dump()和load()两个方法。
load(file),从文件读取Python数值并返回该值;
loads(bytes),将读入的字节对象转换为Python数值;
dump(value,file)将Python数值写入到文件;
dumps(value),将读入的Python数值转换为一个字节对象。168.1文件读写操作【例题8-10】使用marshal模块中的dump()和load()方法进行数据的转换。。17importmarshaldata1=['abc',12,23]data2={1:'aaa',"b":'dad'}data3=(1,2,4)#把这些数据序列化到文件中,注:文件必须以二进制模式打开fo=open("marin.txt",'wb')marshal.dump(data1,fo)marshal.dump(data2,fo)marshal.dump(data3,fo)fo.close()#从文件中读取序列化的数据
fi=open('marin.txt','rb') #data1=[]data1=marshal.load(fi)data2=marshal.load(fi)data3=marshal.load(fi)print(data1) print(data2)print(data3)8.1文件读写操作使用shelve模块对二进制进行读写Python标准库shelve也是一种序列化方式,shelve是对象持久化保存方法,可以像字典赋值一样来写入二进制文件,也可以像字典一样读取二进制文件。使用shelve模块时,只需要使用open函数获取一个shelf对象,然后对数据进行增删改查操作,然后将内存数据存储到磁盘中,最后调用close函数变回将数据写入文件。open(filename):创建或打开一个shelve对象。shelve默认打开方式支持同时读写操作。188.1文件读写操作【例题8-11】使用shelve模块中的open()方法进行数据写入和读出。19importshelve#打开ts文件,如果不存在就创建s=shelve.open('ts')try:s['aa']={'int':101,'float':8.7,'String':'shelvemodule'}s['bb']=[1,2,3]finally:s.close()try:s=shelve.open('ts')print(s['aa'])print(s['bb'])finally:s.close()8.1文件读写操作8.1.7复制文件复制文件可以使用shutil模块的copyfile()方法或os模块的使用system()方法复制文件到指定文件夹。1.使用shutil模块的copyfile()方法复制文件20【例题8-13】使用shutil模块的copyfile()方法复制文件。importshutilfi=open('D:\\a.txt','rb')fo=open('D:\\b.txt','wb')src='D:\\a.txt'srt='D:\\b.txt'shutil.copyfile(src,srt)print("复制成功!")【运行结果】复制成功!8.1文件读写操作8.1.7复制文件复制文件可以使用shutil模块的copyfile()方法或os模块的使用system()方法复制文件到指定文件夹。1.使用shutil模块的copyfile()方法复制文件21【例题8-14】使用os模块的使用system()方法复制文件。importossrc='D:\\1.png'srt='D:\\2.png'os.system("copy%s%s"%(src,srt))print("复制成功!")【运行结果】复制成功!8.1文件读写操作8.1.8移动文件Python移动文件可以使用shutil模块中的move()方法。shutil.move(src,dst):将一个文件或文件夹从src移动到dst。dst是已存在的文件夹:src将会被移动到dst内;dst是已存在的文件:dst内容会被覆盖;22【例题8-14】使用shutil模块的move()方法移动文件。importshutilsrc='D:\\abc.txt'srt='E:\\xyz.txt'shutil.move(src,srt)print("移动成功!")8.1文件读写操作8.1.9重命名文件Python重命名文件可以使用os模块中的rename()方法。os.rename()方法用于命名文件或目录,从src到dst,如果dst是一个存在的目录,将抛出OSError。23【例题8-15】使用os模块中的rename()方法重命名文件。importossrc="E:\\abc.txt"srt="E:\\xyz.txt"try:os.rename(src,srt)print("重命名成功")except:print("重命名异常")8.1文件读写操作8.1.10删除文件python删除一个文件需要使用os模块的remove()方法。os.remove()方法用于删除指定路径的文件。如果指定的路径是一个目录,将抛出OSError。24【例题8-16】使用os模块中的remove()方法删除文件。importos,syspatht="E:/测试/"print("删除前的测试目录下的文件:%s"%os.listdir(patht))str=input("请输入要删除的文件:");if(os.path.exists(patht+str)):os.remove(patht+str)print("删除后的测试目录下的文件:%s"%os.listdir(patht))else:print("要删除的文件不存在")8.2目录操作8.2.1创建目录1.使用mkdir创建目录25在Python中可以使用os.mkdir()方法创建目录。os.mkdir(path):path为要创建目录的路径,如果path已存在,创建目录失败。【例题8-17】使用os模块中的mkdir()方法创建目录。importospatht="E:/测试/"print("创建前的测试目录下的文件和文件夹:%s"%os.listdir(patht))str=input("请输入要创建的文件夹名称:");if(os.path.exists(patht+str)):print("该目录已经存在")else:pt=patht+stros.mkdir(pt)print("创建后的测试目录下的文件和文件夹:%s"%os.listdir(patht))【运行结果】创建前的测试目录下的文件和文件夹:['2.png','a.docx','abc.txt','test.xlsx','test1','test2','xyz.txt']请输入要创建的文件夹名称:test3创建后的测试目录下的文件和文件夹:['2.png','a.docx','abc.txt','test.xlsx','test1','test2','test3','xyz.txt']8.2目录操作8.2.1创建目录2.使用makedirs创建目录在Python中可以使用os.makedirs()方法创建多级目录。os.makedirs():用于递归创建目录。26【例题8-18】使用os模块中的mkdir()方法创建多级目录。importospatht="E:/测试/"print("创建前的测试目录下的文件和文件夹:%s"%os.listdir(patht))str=input("请输入要创建的多级文件夹名称:");if(os.path.exists(patht+str)):print("该目录已经存在")else:pt=patht+stros.makedirs(pt)print("创建后的测试目录下的文件和文件夹:%s"%os.listdir(patht))【运行结果】创建前的测试目录下的文件和文件夹:['abc.txt','test1','test2']请输入要创建的多级文件夹名称:test\test1\test2\test3创建后的测试目录下的文件和文件夹:['abc.txt','test','test1','test2']8.2目录操作8.2.2获取目录os模块中获取目录的主要方法有:
os.getcwd(path):获取当前工作目录;
os.path.abspath(path):获取当前工作目录的绝对路径。【例题8-19】使用os模块中的getcwd()和path.abspath()方法创建多级目录。importos#返回当前工作路径print(os.getcwd())#返回当前文件的绝对路径print(os.path.abspath('demo8-18.py'))27【运行结果】E:\测试\testE:\测试\test\demo8-18.py8.2目录操作8.2.3遍历目录os.listdir():用于返回指定的文件夹包含的文件或文件夹的名字的列表。listdir返回一个列表,列表包含pub目录下所有文件名称,然后使用for循环输出列表;os.walk():递归遍历目录文件,walk方法会返回一个三元组,分别是root、dirs和files。其中root是当前正在遍历的目录路径;dirs是一个列表,包含当前正在遍历的目录下所有的子目录名称;files也是一个列表,包含当前正在遍历的目录下所有的文件。288.2目录操作8.2.3遍历目录【例题8-20】使用os模块中的listdir()方法遍历目录。importos#等待遍历的目录路径path="E:/测试/"#使用listdir方法遍历path目录dirs=os.listdir(path)#输出所有文件和文件夹forfileindirs:print(path+"下的文件:"+file)#输出所有文件和文件夹的绝对路径forfileindirs:print(path+"下的文件的绝对路径:"+os.path.join(path,file))29【运行结果】E:/测试/下的文件:abc.txtE:/测试/下的文件:testE:/测试/下的文件:test1E:/测试/下的文件:test2E:/测试/下的文件的绝对路径:E:/测试/abc.txtE:/测试/下的文件的绝对路径:E:/测试/testE:/测试/下的文件的绝对路径:E:/测试/test1E:/测试/下的文件的绝对路径:E:/测试/test28.2目录操作8.2.1创建目录1.使用mkdir创建目录30【例题8-21】使用os模块中的walk()方法遍历目录。importos#等待遍历的目录路径path="E:/测试/"#使用walk方法递归遍历path目录forroot,dirs,filesinos.walk(path):fornameinfiles:print(os.path.join(root,name))fornameindirs:print(os.path.join(root,name))【运行结果】E:/测试/abc.txtE:/测试/testE:/测试/test1E:/测试/test2E:/测试/test\demo8-18.pyE:/测试/test\test1E:/测试/test\test1\test2E:/测试/test\test1\test2\test38.2目录操作8.2.4删除目录os.rmdir(path):方法删除目录,目录应该是一个空文件夹;os.removedirs(path):递归地删除目录,目录中不能有文件。shutil.rmtree(path):不仅可以删除空目录,也可以删除含有文件或子目录的目录,功能是很强大的!318.2目录操作8.2.4删除目录【例题8-22】使用os模块中的rmdir()方法删除目录。importospath=input("请输入要删除的目录:")#使用rmdir方法删除目录try:os.rmdir(path)print(path+"删除成功")except:print(path+"目录非空或不存在,删除失败!")32【运行结果】请输入要删除的目录:E:\测试\test1E:\测试\test1删除成功8.2目录操作8.2.4删除目录【例题8-23】使用os模块中的removedirs方法删除多级目录。importospath=input("请输入要删除的多级目录:")#使用removedirs方法删除多级目录try:os.removedirs(path)print(path+"删除成功")except:print(path+"目录非空或不存在,删除失败!")importospath=input("请输入要删除的多级目录:")#使用rmdir方法删除目录try:os.removedirs(path)print(path+"删除成功")except:print(path+"目录非空或不存在,删除失败!")33【运行结果】请输入要删除的多级目录:E:\test\test1\test2E:\test\test1\test2删除成功8.3综合案例【例题8-25】批量修改文件名,批量添加文件名前缀或批量删除前缀相同的文件名的前缀。34importosprint("""功能列表1批量添加2批量删除""")sn=int(input("请输入功能序号"))#录入前缀prefix=input("请输入前缀:")#录入路径path=input("请输入路径:")#目录下的所有目录和文件flist=os.listdir(path)print(flist)#遍历是否为文件forfinflist:print(os.path.join(path,f))#连接路径ifnotos.path.isfile(os.path.join(path,f)):continue#如果不是文件,跳过此次循环执行下个循环ifsn==1:#添加其实就是重命名os.rename(os.path.join(path,f),os.path.join(path,prefix+f))elifsn==2:#删除
其实就是重命名#判断是否为prefix开头iff.startswith(prefix):os.rename(os.path.join(path,f),os.path.join(path,f[len(prefix):]))#通过切片截取后面文件名else:print("请输入正确序号")breakelse:print("执行成功")8.3综合案例【例题8-25】批量修改文件名,批量添加文件名前缀或批量删除前缀相同的文件名的前缀。35【运行结果】功能列表1批量添加2批量删除请输入功能序号1请输入前缀:E请输入路径:E:\测试修改前的文件列表:['aha.txt','ahabc.txt','ahxyz.txt','test']E:\测试\aha.txtE:\测试\ahabc.txtE:\测试\ahxyz.txtE:\测试\test执行成功,修改后的文件列表:['Eaha.txt','Eahabc.txt','Eahxyz.txt','test']8.3综合案例【例题8-26】批量修改文件的扩展名36importospath=input("请输入路径:")files=os.listdir(path)#列出当前目录下所有的文件forfilenameinfiles:portion=os.path.splitext(filename)#分离文件名字和后缀print(portion)#根据后缀来修改,如无后缀则空ifportion[1]==".doc":newname=portion[0]+".docx"#要改的新后缀os.chdir(path)os.rename(filename,newname)print(filename+"更名为:"+newname)运行结果】请输入路径:E:\测试('test','')('作业','.doc')作业.doc更名为:作业.docx('古诗','.doc')古诗.doc更名为:古诗.docx('比赛','.doc')比赛.doc更名为:比赛.docx8.3综合案例【例题8-27】批量删除指定类型的文件。37importsysimportos.pathimportshutil#获取当前路径deffileDir():path=input("请输入路径:")print(path)ifos.path.isdir(path):returnpathelifos.path.isfile(path):returnos.path.dirname(path)#获取文件后缀名defsuffix(file,*suffix):array=map(file.endswith,suffix)ifTrueinarray:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 确认供应商交货时间与数量商洽函(8篇)
- 个人创业项目市场分析方案
- 企业环境友好发展承诺书8篇
- 2026年医学资格护士执业资格考试试卷
- 2026年经济师考试《财政税收》冲刺押题卷
- 设计师项目交付标准手册
- 公共关系危机应对方案及执行模板
- 电子工程电路设计基础理论指导书
- 2026年选择雨伞的心理测试题及答案
- 2026年大一思政备考必刷历年真题+2026新题带答案
- 蜗牛与黄鹂鸟(课件)人音版音乐二年级上册
- 小型水库除险加固毕业设计样本
- PLC在航空航天与飞行安全中的应用与智能化控制
- 软件生存周期过程控制程序
- 工业互联网网络建设技术规范
- 杯中百年:133款经典鸡尾酒和背后的故事
- 绘本在小学英语口语教学中的实证研究
- 医奇V钾薄膜衣片袁老师课件
- 社会工作综合能力(初级)课件
- 广东开放大学学位外语(本23春)形成性考核2试题及答案
- 试论沈从文《边城》中的宿命思想
评论
0/150
提交评论