第6章 Python文件操作_第1页
第6章 Python文件操作_第2页
第6章 Python文件操作_第3页
第6章 Python文件操作_第4页
第6章 Python文件操作_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

Python基础教程第6章:文件操作目录文件操作基础:打开与关闭文件读写:文本与二进制上下文管理器:with语句深度解析路径与目录操作:os模块实战结构化数据:CSV与JSON处理实战案例:日志分析器常见问题与最佳实践文件操作基础:打开与关闭打开→操作→关闭文件操作的基本流程打开文件使用`open()`函数,建立程序与文件的连接。操作文件通过文件对象的方法(如`read()`,`write()`)进行读写。关闭文件使用`close()`方法,释放系统资源。关键点:忘记关闭文件可能导致资源泄露、数据丢失或文件损坏。`open()`函数与文件模式`open()`函数常用参数file必需,文件路径(相对或绝对)。mode可选,打开模式,默认为'r'。encoding可选,文件编码,建议指定'utf-8'。文件模式对比表模式描述文件存在文件不存在`r`只读✅正常打开❌报错`w`只写(覆盖)❌清空内容✅创建新文件`a`只写(追加)✅保留内容✅创建新文件`r+`读写✅正常打开❌报错`w+`读写(覆盖)❌清空内容✅创建新文件对于图片、视频等二进制文件,需使用`rb`/`wb`等二进制模式。文件读写:文本与二进制文本文件存储人类可读的字符,如.txt,.py,.csv等。二进制文件存储字节流,如图像、音频、视频等。掌握两种文件类型的读写是数据处理与存储的基础文本文件的读写读取方法read(size)读取指定字符,无参读全部readline()读取一行内容readlines()读取所有行,返回列表写入方法write(str)写入一个字符串writelines(seq)写入字符串序列注意事项`write()`不会自动添加换行符`\n`。二进制文件的读写核心要点字节流为单位所有操作均以字节流(bytes)为基本单位。特定打开模式使用'rb'模式读取,'wb'模式写入。无需编码参数操作字节流,不需要指定encoding参数。代码示例:文件复制#读取并复制图片文件withopen('source.jpg','rb')asf_in:withopen('copy.jpg','wb')asf_out:data=f_in.read()f_out.write(data)原理:将源文件的字节流原封不动地写入新文件。文件指针操作:`seek()`与`tell()`tell()方法返回当前文件指针的位置,以从文件开头算起的字节数表示。withopen('file.txt','r')asf:

print(f.tell())#输出:0(文件开头)seek()方法移动文件指针到指定位置,实现随机访问。offset:偏移量(字节)whence:起始位置(0,1,2)whence=0(默认)从文件开头开始计算偏移量。whence=1从当前指针位置开始计算。whence=2从文件末尾开始计算偏移量。3.上下文管理器:with语句深度解析优雅处理资源,让代码更简洁、更安全为什么推荐使用`with`语句?try-finally方式(繁琐易错)f=Nonetry:f=open('test.txt','r')content=f.read()finally:iffisnotNone:f.close()with语句方式(简洁优雅)withopen('test.txt','r')asf:content=f.read()#代码块结束,文件自动关闭结论:`with`语句是处理文件操作的最佳实践。with语句的工作原理1.获取管理器执行`with`后的表达式,得到上下文管理器对象。2.进入上下文调用`__enter__()`方法,返回值赋给`as`变量。3.执行代码块执行`with`缩进块内的业务逻辑代码。4.退出上下文无论是否异常,均调用`__exit__()`方法清理。路径与目录操作:os模块实战Python核心编程·第四章路径处理:os.pathvspathlibos.path模块(传统方式)importospath=os.path.join(os.getcwd(),'data','file.txt')print(os.path.exists(path))#True/Falsepathlib库(Python3.4+,推荐)frompathlibimportPathpath=Path.cwd()/'data'/'file.txt'print(path.exists())#True/False推荐使用pathlib提供了更直观、更面向对象的API,极大地提升了路径处理的可读性和开发效率。目录操作:创建、删除与遍历创建与删除目录importos#创建单个目录os.mkdir('new_dir')#递归创建多级目录os.makedirs('parent/child',exist_ok=True)#删除空目录os.rmdir('new_dir')遍历目录#遍历目录树forroot,dirs,filesinos.walk('parent'):forfileinfiles:file_path=os.path.join(root,file)print(file_path)创建目录使用mkdir()创建单个目录,makedirs()递归创建多级目录。删除与遍历使用rmdir()删除空目录,walk()递归遍历目录树。5.结构化数据:CSV与JSON处理掌握Python标准库中csv和json模块,轻松处理表格与配置数据CSV文件处理:`csv`模块读取CSV(使用`DictReader`)importcsvwithopen('data.csv','r',newline='')asf:reader=csv.DictReader(f)forrowinreader:print(row['name'],row['age'])写入CSV(使用`DictWriter`)importcsvfieldnames=['name','age','city']withopen('output.csv','w',newline='')asf:writer=csv.DictWriter(f,fieldnames)writer.writeheader()writer.writerow({'name':'Alice','age':30})核心优势按列名访问通过字典键名访问数据,代码更清晰易读。自动数据解析自动处理引号、逗号等特殊字符,避免错误。JSON文件处理:`json`模块核心函数json.dump(obj,file)将Python对象写入文件。json.load(file)从文件读取JSON并转为Python对象。json.dumps(obj)将Python对象转换为JSON字符串。json.loads(s)将JSON字符串转换为Python对象。示例-读取配置文件importjsonwithopen('config.json','r')asf:config=json.load(f)print(config['database']['host'])关键点:格式化输出使用`indent`参数可使输出的JSON文件格式化,更易于阅读。实战案例:日志分析器综合运用文件读取、数据统计、JSON写入等知识,将零散的技术点组合成一个完整的应用程序。实战案例:需求分析核心需求分析一个Web服务器日志文件(格式为CSV),统计不同HTTP状态码的出现次数。输入(Input)CSV日志文件文件名为`access.log`,包含timestamp,url,status_code,ip等字段。输出(Output)控制台打印实时展示各状态码统计次数。JSON文件保存将统计结果写入新文件`status_summary.json`,便于后续处理。日志分析器:代码实现importcsvimportjsonfromcollectionsimportdefaultdictdefanalyze_logs(log_file,output_file):status_counts=defaultdict(int)withopen(log_file,'r')asf:reader=csv.DictReader(f)forrowinreader:if'status_code'inrow:status_counts[row['status_code']]+=1withopen(output_file,'w')asf:json.dump(status_counts,f,indent=4)if__name__=="__main__":analyze_logs('access.log','status_summary.json')Python代码实现:读取CSV日志,统计HTTP状态码,并将结果写入JSON文件。常见问题与最佳实践避坑指南与专业素养常见问题排查(FAQ)Q1:UnicodeDecodeError:文件编码不匹配解决:在open()中明确指定正确的encoding,如encoding='utf-8'。Q2:FileNotFoundError:文件或路径不存在解决:仔细检查路径拼写。使用os.path.exists()或Path.exists()验证。Q3:忘记关闭文件导致资源泄露解决:总是使用with语句。Q4:w模式意外覆盖文件解决:谨慎使用w模式。追加使用a模式,读写使用r+。Q5:读取大文件时内存溢出解决:使用readline()或迭代文件对象逐行读取,而不是read()。文件操作最佳实践总是使用`with`语句自动管理资源,代码更简洁、更安全。明确指定编码文本文件操作时,始终指定`encoding='utf-8'`。处理异常使用`try-except`捕获`FileNotFoundError`等。使用`pathlib`处理路径代码更清晰、易维护,跨平台兼容性更好。二进制文件不加`encoding`使用`rb`/`wb`模式,并省略`encoding`参数。关闭文件手动管理时,确保`close()`在`finally`块中调用。逐行读取大文件避免一次性将整个文件加载到内存。使用标准模块处理结构化数据使用`csv`/`json`模块,不要手动解析。课后实操任务任务:实现一个文件批量重命名工具需求遍

温馨提示

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

评论

0/150

提交评论