课件0802-文件的操作_第1页
课件0802-文件的操作_第2页
课件0802-文件的操作_第3页
课件0802-文件的操作_第4页
课件0802-文件的操作_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文件的操作制作:教材编写团队出版社:机械工业出版社《Python编程基础与应用》配套课件本课件为《Python编程基础与应用(第2版)》配套教学资源,由编写团队精心打造。为便于教学使用,团队同步提供了丰富的辅助材料,涵盖微课视频、教学课件、实训手册、习题答案、课程标准及程序源代码等。同时,教材配套超星教学示范包,支持一键克隆为网络在线课程,助力高效开展线上线下混合式教学。欢迎联系出版方订购使用。

书名:《Python编程基础与应用(第2版)》出版社:机械工业出版社主编:蓝永健、陈冬冬副主编:蔡德琛、朱海鑫、邓爱玲+contents目录文本文件的读取与写入with-open操作二进制文件的读取与写入获取文件属性操作文件处理的常用操作文本文件的读取与写入01文本文件的读取与写入文件被打开后,根据打开方式的不同进行文件的读写操作。对于文本文件的读取操作,可以有以下方式。操作方法含义<file>.read(size=-1)从文件中读取的字节数,默认为-1,如果未给定或为负则读取所有表示读取整个文件。<file>.readline(size=-1)从文件读取整行,包括"\n"字符,如果给出参数,读入该行前size长度的字符串或字节流。<file>.readlines()读取所有行(直到结束符EOF)并返回列表。范例:使用三种方式读取文件内容f=open("hello.txt",encoding="utf-8")print(f.read())#一次性读取文件中所有数据#print(f.read(8))#读取前8个字符的内容,包含\nf.close()#结果如下:#'这是第一行\n这是第二行\n这是第三行\n这是第四行\n这是第五行\n这是第六行'读取文件第一种方式:使用read()一次性读取文件中所有数据。使用read()时候,如果带参数,则可以提取指定数量的内容。范例:使用三种方式读取文件内容f=open("hello.txt",encoding="utf-8")print(f.readline())print(f.readline())print(f.readline())f.close()#结果如下:#'这是第一行\n'#'这是第二行\n'#'这是第三行\n'读取文件第二种方式:readline(),能够实现逐行读取数据。范例:使用三种方式读取文件内容f=open("hello.txt",encoding="utf-8")print(f.readlines())f.close()#结果如下:#['这是第一行\n','这是第二行\n','这是第三行\n','这是第四行\n','这是第五行\n','这是第六行']读取文件第三种方式:readlines(),能够实现逐行读取数据,并将数据以字符串形式保存在一个列表里面。范例:写文件内容f=open("hello.txt",”w”,encoding="utf-8")f.write('2020')f.write(“这是文件写入内容:”)f.write('\n写入换行')f.close()#结果如下:#2020这是文件写入内容:#写入换行范例:追加写文件内容f=open('output.txt','a',encoding='utf-8')f.write("Appendedcontent\n")f.close()安全读写模板——异常处理(重要!)try:f=open('example.txt','r',encoding='utf-8')content=f.read()print(content)exceptFileNotFoundError:print("文件不存在")exceptUnicodeDecodeError:print("编码错误")exceptIOErrorase:print(f"IO错误:{e}")finally:if'f'inlocals():#检查文件对象是否存在

f.close()#确保文件一定被关闭文件指针操作——指定位置读写f=open('example.txt','r+',encoding='utf-8')f.seek(5)#移动指针到第5字节print(f.read(3))#读取3个字符f.seek(0,2)#跳到文件末尾(0表示偏移量,2表示从末尾计算)f.write("\nAppendedatend")f.close()注意事项必须显式调用close()忘记关闭文件会导致资源泄漏可能造成数据没有完全写入磁盘文件打开模式模式描述'r'只读(默认)'w'写入(会覆盖原有内容)'a'追加写入'r+'读写'b'二进制模式(如:'rb')with-open操作02with-open操作

在对文件进行open()操作时候,有时候会遇到文件不存在等情况,程序就会抛出一个IOError的错误,一旦出错,后面的f.close()就不会调用,python引入一种安全的文件操作with语句。withexpression[astarget]:参数说明:expression:是一个需要执行的表达式;target:是一个变量或者元组,存储的是Expression:表达式执行返回的结果,可选参数。范例为什么用with……open操作在Python中,使用withopen(...)asfile:语句操作文件是一种上下文管理器(ContextManager)的用法,它通过自动管理资源(如文件句柄)来提升代码的健壮性和可读性。为什么用with……open操作1.自动关闭文件,避免资源泄漏问题:手动调用file.close()时,若在open和close之间发生异常(如代码错误、程序中断),文件可能无法正常关闭,导致资源泄漏。解决:with语句会在代码块执行完毕后自动调用file.close(),即使发生异常也会确保文件关闭。#手动关闭(有风险)file=open("data.txt","r")try:data=file.read()finally:file.close()#必须显式调用,否则可能泄漏#使用with(推荐)withopen("data.txt","r")asfile:data=file.read()#无需手动关闭,with自动处理为什么用with……open操作2.代码简洁性与可读性问题:传统的try-finally模式需要额外代码块,逻辑分散。解决:with将资源管理逻辑封装在上下文中,代码更紧凑、意图更清晰。3.异常处理的天然支持问题:手动处理异常时,需在finally中重复关闭操作。解决:with语句内部已集成异常处理机制,确保无论是否发生异常,资源都会被正确释放。为什么用with……open操作4.上下文管理器的扩展性原理:with语句通过实现__enter__和__exit__方法工作,可自定义上下文管理器(如管理数据库连接、网络套接字等)。示例:自定义上下文管理器classMyContextManager:def__enter__(self):print("获取资源")returnself

def__exit__(self,exc_type,exc_val,exc_tb):print("释放资源")withMyContextManager()ascm:print("正在操作资源...")为什么用with……open操作5.适用场景文件操作:读写文件时优先使用with。数据库连接:如withsqlite3.connect("db.sqlite")asconn:。线程锁:如withthreading.Lock():。举例——CSV文件处理importcsv#写入CSVwithopen('data.csv','w',newline='')asf:writer=csv.writer(f)writer.writerow(['Name','Age'])writer.writerow(['Alice',25])#读取CSVwithopen('data.csv','r')asf:reader=csv.reader(f)forrowinreader:print(row)举例——JSON文件处理importjson#写入JSONdata={'name':'Alice','age':25}withopen('data.json','w')asf:json.dump(data,f,indent=4)#读取JSONwithopen('data.json','r')asf:loaded=json.load(f)print(loaded['name'])#输出:Alice二进制文件的读取与写入03二进制文件的读取与写入在处理图片、音频、视频等非文本数据时,Python必须启用二进制模式。使用open()函数时,需在模式参数中加入字母'b',如'rb'或'wb',以确保数据完整性。rb·只读模式以二进制格式打开文件用于只读,文件指针默认位于文件开头。是读取图片、视频等静态资源时最常用的安全模式。wb·写入模式以二进制格式打开文件用于写入。若文件已存在会清空原有内容后重新写入;若不存在则自动创建。ab·追加模式以二进制格式打开文件用于追加写入。文件指针自动定位到末尾,新数据追加到原内容之后,不会破坏已有信息。常见应用场景:图片上传下载、音视频剪辑、可执行程序打包、数据库文件备份,以及网络编程中socket数据传输等。范例:读取图片文件并把图片另存为操作示例:打开二进制文件(打开图片文件)withopen("example.jpg","rb")asfile:#读取二进制模式

data=file.read()示例:读取二进制数据——分块读取大文件chunk_size=1024#每次读取1KBwithopen("large_video.mp4","rb")asfile:whileTrue:chunk=file.read(chunk_size)ifnotchunk:break#处理chunk(如上传到云存储)read(size):读取指定字节数,若省略则读取全部内容。readinto(buffer):高效读取到预分配的缓冲区(如bytearray)。示例:写入二进制数据withopen("source.zip","rb")assrc,open("copy.zip","wb")asdst:dst.write(src.read())#一次性读写(适合小文件)write(bytes_data):写入字节数据,需确保输入为bytes或bytearray类型示例:追加二进制数据log_entry=b"\x0A\x0DNewlogentry"#二进制格式的日志withopen("app.log","ab")asfile:file.write(log_entry)使用'ab'模式在文件末尾追加内容。实际应用示例——图片文件复制defcopy_binary_file(src,dst):withopen(src,'rb')asf_src,open(dst,'wb')asf_dst:whileTrue:chunk=f_src.read(4096)#每次读取4KBifnotchunk:breakf_dst.write(chunk)copy_binary_file('original.jpg','copy.jpg')获取文件属性操作04获取文件属性操作python使用os.stat()获取相关文件的系统状态信息,即可以获取文件的属性。语法如下:st_modeinode保护模式st_inoinode节点号。st_devinode驻留的设备。st_nlinkinode的链接数。st_uid所有者的用户ID。st_gid所有者的组ID。st_size普通文件以字节为单位的大小;包含等待某些特殊文件的数据。st_atime上次访问的时间。st_mtime最后一次修改的时间。st_ctime由操作系统报告的”ctime”。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间。os.stat(path)#path参数为指定的路径范例举例——基本用法importos#获取文件状态信息file_path="example.txt"stat_info=os.stat(file_path)#打印所有属性(返回的是一个命名元组)print(stat_info)os.stat_result(st_mode=33206,st_ino=12345678,st_dev=16777220,st_nlink=1,st_uid=501,st_gid=20,st_size=1024,st_atime=1620000000,st_mtime=1620000000,st_ctime=1620000000)输出示例:举例——使用os.stat()获取文件状态importosstat_info=os.stat('example.txt')print(f"文件大小:{stat_info.st_size}字节")#文件大小print(f"最后修改时间:{stat_info.st_mtime}")#时间戳格式举例——时间戳转可读格式importosfromdatetimeimportdatetimefile_path="example.txt"stat_info=os.stat(file_path)#转换最后修改时间mtime=stat_info.st_mtimereadable_time=datetime.fromtimestamp(mtime).strftime("%Y-%m-%d%H:%M:%S")print(f"最后修改时间:{readable_time}")举例——结合stat模块解析权限importosimportstatfile_path="example.txt"stat_info=os.stat(file_path)#判断文件类型ifstat.S_ISREG(stat_info.st_mode):print("这是普通文件")elifstat.S_ISDIR(stat_info.st_mode):print("这是目录")#获取权限数字(如0o644)permissions=stat_info.st_modeprint(f"权限数字:{oct(permissions)}")#检查用户是否有写权限ifpermissions&stat.S_IWUSR:print("用户有写权限")完整案例:文件信息检查工具importosimportstatfromdatetimeimportdatetimedefcheck_file_info(path):try:stat_info=os.stat(path)print(f"路径:{path}")print(f"大小:{stat_info.st_size}字节")print(f"最后修改时间:{datetime.fromtimestamp(stat_info.st_mtime)}")

#解析文件类型

ifstat.S_ISREG(stat_info.st_mode):file_type="普通文件"elifstat.S_ISDIR(stat_info.st_mode):file_type="目录"else:file_type="其他类型"print(f"类型:{file_type}")

#检查权限

permissions=oct(stat_info.st_mode)[-3:]print(f"权限:{permissions}(octal)")

exceptFileNotFoundEr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论