Python语言程序设计课件 第7章 文件操作_第1页
Python语言程序设计课件 第7章 文件操作_第2页
Python语言程序设计课件 第7章 文件操作_第3页
Python语言程序设计课件 第7章 文件操作_第4页
Python语言程序设计课件 第7章 文件操作_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

第7章文件操作引言在前面的章节中,我们已经学习了字典和集合等高级数据类型,它们在处理大量数据时能够高效地进行查找、去重和集合操作。而在实际应用中,数据常常以文件形式存储,尤其是CSV和Excel格式的表格文件。这些文件可以保存大量结构化数据,并且在数据分析、统计等场景中被广泛使用。在这一章中,我们将深入学习如何使用Python处理文件,掌握读取、写入以及异常处理的技巧,从而提高数据处理的效率和稳定性。CATALOGUE目录7.1

文件概述7.2

文件操作7.3Excel相关操作7.4

文件转换文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容7.1文件概述基本概念①文本文件:应用程序(比如文本编辑器)通常会根据文本的编码(如UTF-8、ASCII)来解释这些二进制数据为人类可读的字符。②二进制文件:需要特定的应用程序来正确解析和展示文件内容,如:图像音频视频等分类7.1文件概述用文本编辑器生成一个包含“第七章文件操作!”的txt格式文本文件,命名为7.1.txt。分别用文本文件方式和二进制文件方式读入,并打印输出效果代码如下:tf=open(“7.1.txt”,”rt”)print(Text.readline())tf.close()bf=open(“7.1.txt”,”rb”)

print(bf.readline())bf.close()运行结果输出:第七章文件操作!b'\xe7\xac\xac\xe4\xb8\x83\xe7\xab\xa0\xe6\x96\x87\xe4\xbb\xb6\xe6\x93\x8d\xe4\xbd\x9c!'7.1.1文件的打开与关闭打开:<变量名>=open(<文件名>,<访问模式>)关闭:<变量名>.close()7.1.1文件的打开与关闭文件的访问模式表7-1open()的七种访问模式文件的打开模式含义“r”只读模式,默认值,如果文件不存在,返回FileNotFoundError“w”覆盖写模式,文件不存在则创建,存在则完全覆盖“x”创建写模式,文件不存在则创建,存在则返回FileExistsError“a”追加写模式,文件不存在则创建,存在则在文件最后追加内容“b”二进制文件模式“t”文本文件模式,默认值“+”与r/w/x/a一同使用,在原功能基础上增加同时读写功能其中”r”、”w”、”x”、”b”可以与”b”、”t”、”+”组合使用,如:tf=open(“7.1.txt”,”rt”)7.1.2文件的读写表7-2文件内容读取方法操作方法含义<file>.readall()读取文件的全部内容,并将其作为一个字符串返回。<file>.read(size=-1)从文件中读取最多size个字符。如果size是负数或未指定(默认为-1),则读取并返回文件的所有剩余内容。<file>.readline(size=-1)读取文件中的一行。如果指定了size,则读取最多size个字符,但可能因遇到换行符而提前结束。如果size是负数或未指定(默认为-1),则读取整行。<file>.readlines(hint=-1)读取文件中的所有行,并将它们作为一个列表返回,其中每个元素是一行。如果指定了hint,则读取最多hint个字符,但可能返回比hint更多的行(因为读取会在行尾停止)。如果hint是负数或未指定(默认为-1),则读取并返回文件的所有行。*注意<file>.readall()这个方法在Python3中已经被移除,通常使用<file>.read()代替,并传入一个足够大的数字来读取整个文件。7.1.2文件的读写在Python中,使用open()函数打开文件时,可以通过encoding参数来指定文件的编码格式。这对于读取或写入非ASCII字符(如中文、日文等)的文件特别重要,因为不同的编码方式会决定文件中字符的存储和显示方式,例如想以'utf-8'编码格式打开文件:withopen('filename.txt','r',encoding='utf-8')asfile:content=file.read()7.1.2文件的读写示例#1.获取用户输入的文件路径file_path=input("请输入文件路径:")#2.打开并读取文件内容tf=open(file_path,"r",encoding="utf-8")#3.打印全文内容file_all=tf.read()#读取全文内容print("全文内容打印")print(file_all)tf.close()#4.逐行打印内容tf=open(file_path,"r",encoding="utf-8")file_lines=tf.readlines()#读取所有行内容print("逐行内容打印")forlineinfile_lines:#for循环遍历所有行print(line,end="")#end=''用于避免print函数自动添加的换行符tf.close#关闭文件运行结果:>>>请输入文件路径:<<<f.txt>>>全文内容打印“你好这是第一行你好这是第二行你好这是第三行”>>>逐行内容打印你好这是第一行你好这是第二行你好这是第三行7.1.2文件的读写表7-3文件内容写入方法操作方法含义<file>.write(s)向文件写入一个字符串或字节流<file>.writelines(lines)将一个元素全为字符串的列表写入文件<file>.seek(offset)改变当前文件操作指针的位置,offset为偏移量。from含义如下:0–文件开头;1–当前位置;2–文件结尾文件的写入:write()7.1.2文件的读写1.字符串写入文件>>>tf=open("7.3.txt","x")>>>tf.write("中国是一个伟大的国家!")>>>print(tf.read())>>>tf.close()中国是一个伟大的国家7.1.2文件的读写2.列表写入文件>>>tf=open("7.3.txt","x")>>>ls=["中国","法国","美国"]>>>tf.writelines(ls)>>>print(tf.read())>>>tf.close()中国法国美国7.1.2文件的读写3.改变文件操作指针的位置参考代码7-27-2.py#1.打开文件tf=open("7.3.txt","w+",encoding='utf-8')#使用utf8编码格式打开文件#2.写入内容tf.write("你好小李小王小张小陈")#3.改变文件操作指针位置tf.seek(6,0)#指向文件开头第三个位置#3.打印内容print(tf.read())tf.close()运行结果输出:小李小王小张小陈7.1.2文件的读写观察以下代码运行结果输出:请输入要写入的文件:7.3.txt#此处为空file_name=input("请输入要写入的文件")tf=open(file_name,"w+")ls=["中国","法国","美国"]tf.writelines(ls)forlineintf:print(line)tf.close列表内容已经被写入文件,为什么逐行遍历文件打印输出的内容是空呢?7.1.2文件的读写文件写入内容后,当前文件操作指针所指向的位置在写入内容的位置后面运行结果输出:>>>请输入要写入的文件:7.3.txt中国法国美国file_name=input("请输入要写入的文件")tf=open(file_name,"w+")ls=["中国","法国","美国"]tf.writelines(ls)tf.seek(0)forlineinfo:print(line)tf.close除了文件读写外,文件的重命名、创建与删除等相关操作也经常用到7.2文件操作基本概念OS库shutil库7.2文件操作OS库os库是Python标准库的一部分,提供了丰富的函数接口来实现与操作系统交互的功能,包括文件和目录操作、环境变量访问、进程管理、系统信息获取以及文件权限和属性修改等操作。表7-4os库文件和目录操作方法操作方法含义os.getcwd()获取当前工作目录。os.mkdir(path[,mode])创建目录,若该目录已存在则抛出异常。os.rmdir删除空目录。os.remove(path)删除指定路径的文件,如果指定路径是一个目录则抛出异常。os.rename(src,dst)重命名文件或目录。os.stat(path)获取文件或目录的详细属性信息,如大小、权限、创建时间等。os.rename(src,dst)7.2文件操作7.2.1文件的重命名src和dst分别代表源路径和目标路径。路径:相对路径和绝对路径示例7.2文件操作7.2.1文件的重命名importosname=input("请输入原文件路径")rname=input("请输入新的文件名")os.rename(name,rname)print("重命名操作完成!")运行结果输出:>>>请输入原文件路径:7.3.txt>>>请输入新的文件名:7.2.2.txt重命名操作完成!一般情况下,在进行文件重命名操作前,应先查看文件权限等级,确保代码有权限进行重命名操作。os库为我们提供了os.stat函数查询文件大小、权限、时间等信息,格式如下:os.stat(path)7.2文件操作7.2.1文件的重命名例如:7.2文件操作7.2.1文件的重命名importosfile_path=input("请输入要查询的文件路径")file_i=os.stat(file_path)print(file_i)运行结果输出:>>>请输入要查询的文件路径:7.2.2.txtos.stat_result(st_mode=33206,st_ino=21392098231246329,st_dev=1488046779,st_nlink=1,st_uid=0,st_gid=0,st_size=22,st_atime=1728205906,st_mtime=1727305807,st_ctime=1727305788)7.2文件操作7.2.1文件的重命名实例7-1:批量文件重命名获取用户输入要自定义的文件夹路径,为该文件夹下的所有txt文件按阿拉伯数字顺序从0开始依次重命名7.2文件操作7.2.1文件的重命名参考代码7-17-1.py#1.获取用户输入的文件路径file_path=input("请输入文件路径:")#2.打开并读取文件内容tf=open(file_path,"r",encoding="utf-8")#3.打印全文内容file_all=tf.read()#读取全文内容print("全文内容打印")print(file_all)tf.close()#4.逐行打印内容tf=open(file_path,"r",encoding="utf-8")file_lines=tf.readlines()#读取所有行内容print("逐行内容打印")forlineinfile_lines:#for循环遍历所有行

print(line,end="")#end=''用于避免print函数自动添加的换行符tf.close#关闭文件运行结果输出:>>>请输入文件夹路径:txtdir已将7.1.txt重命名为0.txt已将7.2.txt重命名为1.txt已将7.3.txt重命名为2.txt已将7.4.txt重命名为3.txt重命名操作已全部完成!withopen(file_path,"w")asf:f.write("")print(f"文件创建成功:{file_path}")7.2文件操作7.2.2文件的创建with语句使用上下文管理器来管理文件的打开和关闭。这意味着文件会在with块结束时自动关闭,无论是否发生异常;不需要调用f.close()来关闭文件我们可以利用open函数的特性创建文件:OSError是一个基类异常,用于表示与操作系统相关的错误,比如文件操作失败(如文件不存在、权限不足等),示例代码如下:7.2文件操作异常捕获importos#指定要创建的文件的目录file_path=input("请输入创建的文件目录路径:")#检查文件路径是否存在ifnotos.path.exists(file_path):print(f"文件路径{file_path}不存在,可以创建")else:

print(f"文件路径{file_path}已存在,不可以创建")#执行创建操作try:

withopen(file_path,"w")asf:print(f"文件{file_path}创建成功!")exceptOSErrorase:print(f"出现错误:{e}")删除文件os.remove()7.2文件操作7.2.2文件的删除7.2文件操作示例代码importos#指定要删除的文件的目录file_path=input("请输入删除的文件目录路径:")#检查文件路径是否存在ifos.path.exists(file_path):print(f"文件路径{file_path}存在,可以删除")else:

print(f"文件路径{file_path}不存在,无需删除")#执行删除操作try:

os.remove(file_path)print(f"文件{file_path}成功删除!")exceptOSErrorase:print(f"出现错误:{e}")shutil.move()如果目标位置存在同名文件,则进行覆盖7.2文件操作7.2.3文件的移动7.2文件操作7.2.3文件的移动123456importshutil#定义源文件路径和目标文件路径source_file="path/to/source/file.txt"destination_dir="path/to/destination/"#使用shutil.move()移动文件shutil.move(source_file,destination_dir)7.2文件操作示例7-2批量处理文件在电脑中有一个文件夹,里面包含了许多文件。编写一个Python程序,实现以下功能:(1)批量删除文件夹中所有扩展名为.txt的文本文件。(2)批量创建新的文件,文件名以new_file_为前缀,后面跟随一个从1开始的递增数字,并且扩展名为.log。例如,new_file_1.log,new_file_2.log,依此类推,总共创建10个新文件。7.2文件操作参考代码参考代码7-97-9.pyimportosimportglobdefdelete_txt_files(directory):#获取目录中所有扩展名为.txt的文件txt_files=glob.glob(os.path.join(directory,'*.txt'))#打印将要删除的文件名fortxt_fileintxt_files:print(f"Deleting:{txt_file}")#删除文件os.remove(txt_file)print("所有txt文件已删除!")

defcreate_log_files(directory,count=10):#创建新文件foriinrange(1,count+1):file_name=f"new_file_{i}.log"file_path=os.path.join(directory,file_name)#创建文件(使用open函数并立即关闭,以创建空文件)withopen(file_path,'w')asfile:pass#打印已创建的文件名print(f"已创建::{file_path}")defmain(directory):#批量删除.txt文件delete_txt_files(directory)#批量创建.log文件create_log_files(directory)if__name__=="__main__":#指定要操作的目录路径directory_path=input("请输入要操作的目录路径:")#检查目录是否存在ifnotos.path.isdir(directory_path):print(f"该文件路径{directory_path}不存在.")else:main(directory_path)7.2文件操作运行结果运行结果输出:>>>请输入要操作的目录路径:7-4所有txt文件已删除!已创建:new_file_1.log已创建:new_file_2.log已创建:new_file_3.log已创建:new_file_4.log已创建:new_file_5.log已创建:new_file_6.log已创建:new_file_7.log已创建:new_file_8.log已创建:new_file_9.log已创建:new_file_10.logpipinstallopenpyxl7.3Excel文件操作openpyxl库是处理Excel文件的一个强大工具。openpyxl库的核心操作流程分为几步:加载工作簿、选择工作表、读取和修改单元格内容,最后保存文件。load_workbook()方法来加载该文件;workbook.active选择默认的活动工作表;通过单元格的坐标(例如'A1')即可获取该单元格的内容;sheet['A1']="新的值"以进行修改;save()方法将修改后的文件保存。7.3Excel文件操作高级操作:通过iter_rows()或iter_cols()方法遍历整个表格的数据,这非常适合处理大量的Excel数据。7.3Excel文件操作#遍历工作表中的所有行forrowinsheet.iter_rows(min_row=1,max_row=5,values_only=True):

print(row)#遍历工作表中的所有列forcolinsheet.iter_cols(min_col=1,max_col=3,values_only=True):

print(col)实例7-3:表格信息处理已知Sheet1中包含学生的基本信息,其中包括固定的"姓名"和"学号"两列,其他列可能是学生的成绩、年龄等信息,内容不确定。Sheet2中包含部分学生的其他信息,"姓名"和"学号"作为唯一的标识符,设Sheet1中有学生的"成绩"信息,Sheet2中有部分学生的"获奖"信息如图所示,程序应通过学号将这两部分信息合并。7.3Excel文件操作7.3Excel文件操作图7-1sheet1部分信息图7-2sheet2部分信息图7-3合并后的部分信息实例7-3:表格信息处理7.3Excel文件操作importopenpyxldefcombine_student_info_flexible(input_file):#加载Excel工作簿workbook=openpyxl.load_workbook(input_file)#获取sheet1,sheet2,和sheet3(如果不存在,创建sheet3)sheet1=workbook['Sheet1']#学生信息表sheet2=workbook['Sheet2']#其他信息表sheet3=workbook.create_sheet('Sheet3')#合并后的信息表#获取sheet1和sheet2的列标题sheet1_headers=[cell.valueforcellinsheet1[1]]sheet2_headers=[cell.valueforcellinsheet2[1]]#创建合并后的列标题combined_headers=sheet1_headers+[headerforheaderinsheet2_headersifheadernotinsheet1_headers]sheet3.append(combined_headers)#将标题添加到sheet3#将sheet1中的数据存储在字典中,学号作为键student_info={}实例7-3:表格信息处理7.3Excel文件操作forrowinsheet1.iter_rows(min_row=2,values_only=True):student_id=row[sheet1_headers.index('学号')]#获取学号student_info[student_id]=list(row)#存储整行数据forrowinsheet2.iter_rows(min_row=2,values_only=True):student_id=row[sheet2_headers.index('学号')]#获取学号ifstudent_idinstudent_info:#获取sheet1中的学生数据student_data=student_info[student_id]#从sheet2中提取不在sheet1中的额外信息extra_info=[row[sheet2_headers.index(header)]forheaderinsheet2_headersifheadernotinsheet1_headers]#合并sheet1和sheet2的信息,并写入sheet3sheet3.append(student_data+extra_info)workbook.save(input_file)print("数据合并成功,已存入sheet3")input_file='students.xlsx'#替换为你的Excel文件名combine_student_info_flexible(input_file)Word转PDFpythoncom:这是PythonforWindowsExtensions的一部分,提供了与WindowsCOMAPI交互的能力。win32com.clientpywin32库的一部分,允许Python使用Windows的COM组件。我们可以通过它调用MicrosoftWord的COM接口来实现文档的转换。PDF转Word

pdf2docx7.4文件转换7.4.1Word转PDF7.4文件转换安装依赖:pipinstallpywin327.4.1Word转PDF7.4文件转换请注意:此代码会自动关闭当前的word文件:参考代码7-117-11.py1234567891011121314151617importwin32com.clientdefword_to_pdf(input_file,output_file):#初始化Word应用程序

word=win32com.client.Dispatch('Word.Application')#打开Word文件

doc=word.Documents.Open(input_file)#将Word文件转换为PDF格式

doc.SaveAs(output_file,FileFormat=17)#FileFormat=17表示保存为PDF格式

#关闭文档和Word应用

doc.Close()word.Quit()if__name__=="__main__":#定义输入的Word文件路径和输出的PDF文件路径

input_path=r'C:\path\to\input\file.docx'output_path=r'C:\path\to\output\file.pdf'#调用函数进行转换

word_to_pdf(input_path,output_path)7.4.2PDF转Word7.4文件转换安装依赖:pipinstallpdf2docx7.4.2PDF转Word7.4文件转换安装依赖:pipinstallpdf2docx7.4.3批量转换word和pdf如何将Word文件批量转换为PDF,并将PDF文件批量转换为Word文件。要求:根据用户输入的批量处理路径、输出路径以及处理方式,对文件进行批量转换。7.4文件转换importosimportwin32com.clientfrompdf2docximportConverterdefbatch_convert(input_folder,output_folder,conversion_type):ifnotos.path.exists(output_folder):os.makedirs(output_folder)ifconversion_type=='0':word_to_pdf_batch(input_folder,output_folder)elifconversion_type=='1':pdf_to_word_batch(input_folder,output_folder)else:print("不支持的转换类型。请使用'word_to_pdf'或'pdf_to_word'")7.4文件转换7.4.3批量转换word和pdfdefword_to_pdf_batch(input_folder,output_folder):word=win32com.client.Dispatch('Word.Applica

温馨提示

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

评论

0/150

提交评论