《python程序设计(AI赋能版)》课件-项目八 文件处理农业数据_第1页
《python程序设计(AI赋能版)》课件-项目八 文件处理农业数据_第2页
《python程序设计(AI赋能版)》课件-项目八 文件处理农业数据_第3页
《python程序设计(AI赋能版)》课件-项目八 文件处理农业数据_第4页
《python程序设计(AI赋能版)》课件-项目八 文件处理农业数据_第5页
已阅读5页,还剩63页未读, 继续免费阅读

下载本文档

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

文档简介

项目八利用文件处理农业数据项目背景-农业数据系统介绍熟练掌握设置文件路径的方法理解掌握创建文件的应用理解文件打开与关闭方法,能够用文件操作解决问题理解文件中绝对路径、相对路径概念学习目标/Target掌握文件读取、写入的方法运用文件的新建、打开、关闭知识和技巧,分析和解决各种问题能够使用文件的读取、写入,对数据进行分析处理

能够熟练设置文件路径,分辨绝对路径与相对路径,解决实际问题章节概述/Summary

当程序运行的时候,变量是保存数据的好媒介,但变量、序列及对象中存储的数据是暂时的,程序运行结束后就会丢失,如果希望程序运行结束后数据仍然存在,就需要将数据保存到文件中。在Python项目中,合理运用文件,不仅能有效保存数据,还能培养我们随机应变,应用python程序解决实际问题的能力。本章将对Python中的文件进行详细讲解。目录/Contents010203文件概述文件路径文件管理04读/写文本文件文件概述8.1

先定一个小目标!

了解文件,能够简述文件的概念以及程序中使用文件的好处8.1文件概述

在程序开发中,文件是用于持久化存储数据或与外部系统交互的载体,通常包含文本、二进制等结构化或非结构化信息。例如,用于读取文本内容的open()函数配合.read()方法、用于写入数据的open()函数配合.write()方法等。我们可以将文件视为计算机中具有路径标识的存储单元,这类单元可以通过open("文件路径","操作模式")的形式打开,并通过返回的文件对象调用读写方法进行操作。8.1文件概述8.1文件概述未使用文件的程序数据存储

使用文件的程序数据存储

使用文件前,正方形的边长数据和图案生成逻辑都硬编码在程序中,缺乏灵活性;而使用文件后,数据和程序逻辑分离,我们可以方便地修改square_lengths.txt文件中的边长数据,程序能够根据新的数据生成对应的图案并存储,提高了程序的可维护性和扩展性。文件路径8.2

先定一个小目标!8.2.1文件路径模块

掌握文件路径书写方法,能够根据需求写出正确路径。

任何一个文件操作(如文件的创建、打开、读/写、删除等),都需要确定文件在磁盘中的位置。Python与C语言一样,也是通过文件路径来定位文件。8.2.1文件路径模块(1)文件路径模块

OS模块:对于文件的系统级操作可以借助python中的专用模块(如os、sys等),并调用模块中的制定函数来实现。导入os模块后,可以使用该模块提供的通用变量获取与系统有关的信息。8.2.1文件路径模块案例11importos#导入os模块2print(dir(os.path))#列出模块中的函数运行结果:['_LCMAP_LOWERCASE','_LCMapStringEx','_LOCALE_NAME_INVARIANT','__all__','__builtins__','__doc__','__file__','__loader__','__name__','__package__','__spec__','_abspath_fallback','_get_bothseps','_getfinalpathname','_getfinalpathname_nonstrict','_getfullpathname','_getvolumepathname','_nt_readlink','_path_isdevdrive','_readlink_deep','abspath','altsep','basename','commonpath','commonprefix','curdir','defpath','devnull','dirname','exists','expanduser','expandvars','extsep','genericpath','getatime','getctime','getmtime','getsize','isabs','isdevdrive','isdir','isfile','isjunction','islink','ismount','join','lexists','normcase','normpath','os','pardir','pathsep','realpath','relpath','samefile','sameopenfile','samestat','sep','split','splitdrive','splitext','splitroot','stat','supports_unicode_filenames','sys']用于判断目前正在使用的平台,并给出操作系统名。8.2.1文件路径模块案例21importos#导入os模块2print()运行代码,结果如下:ntos.extsep用于获取当前操作系统中文件名和后缀之间的分隔符。案例3

1importos#导入os模块2print(os.extsep)#获取当前操作系统中文件名和后缀之间分分隔符运行代码,结果如下:.os.pathsep用于获取当前操作系统中的路径分隔符。8.2.1文件路径模块os.sep用于获取当前操作系统中文件路径分隔符。案例41importos#导入os模块2print(os.pathsep)运行代码,结果如下:;案例51importos#导入os模块2print(os.sep)运行代码,结果如下:\os.getcwd()用于获取当前工作目录。8.2.1文件路径模块案例61importos#导入os模块2print(os.getcwd())运行代码,结果如下:C:\Users\WIN11\PycharmProjects\pythonProject

先定一个小目标!8.2.2绝对路径与相对路径

掌握绝对路径与相对路径的定义,能够根据需求写出正确路径。8.2.2绝对路径与相对路径

当前路径是python用于查找文件的参考位置。明确一个文件所在的路径有两种表示方式,分别是绝对路径和相对路径。

绝对路径从根文件开始。Windows系统中以盘符(如C:、D)作为根文件夹,是文件的实际路径。

相对路径指的是文件相对于当前工作目录所在的位置。例如,在windows操作系统中,若当前工作目录为C:\Windows\System32,文件demo.txt就位于这个System32文件夹下,则demo.txt的相对路径表示为.\demo.txt。在使用相对路径表示某文件所在的位置时,除了经常使用.\表示当前所在目录,还会用到..\表示当前所在目录的父目录。8.2.2绝对路径与相对路径【创建路径】

文件路径可以直接通过定义字符串来获取。案例71importos#导入os模块2path1="C:\\Windows\\System32"#定义工作目录3path2=".\\demo.txt"#以当前所在目录【判断路径表示方式】os.path.isabs用于判断路径是否为绝对路径。如果是一个绝对路径,就返回True;如果是一个相对路径,就返回False。案例81print(os.path.isabs(path1))2print(os.path.isabs(path2))运行代码,结果如下:TrueFalse8.2.2绝对路径与相对路径【创建绝对路径】

除了可以使用字符串赋值定义绝对路径与相对路径,还可以通过函数创建绝对路径。os.path.abspath函数用于获取指定路径的绝对路径。案例91print(os.path.abspath(path1))2print(os.path.abspath(path2))运行代码,结果如下:C:\Windows\System32C:\Users\WIN11\PycharmProjects\pythonProject\demo.txt

路径表示终点是目标文件,目录表示终点是文件夹。目录是无法直接找到目标文件的,目录下可能有多个文件或文件夹。

路径下的实际目录取决于文件的格式。在Windows操作系统下,一个有效的路径格式如下:8.2.3文件路径与文件夹路径1Drive:\\<dir...>\\<fileordir>

其中,dirve:\\<dir...>是目录,是文件夹,该文件夹又称当前工作目录、当前工作文件夹或现有工作目录。其中,drive:是文件所在的逻辑驱动器盘符,<dir...>是文件或目录所在的各级子目录,<fileordir>是所要操作的文件或目录名。Python的路径必须满足这种格式要求。<fileordir>可以是文件或文件夹。为方便划分,根据路径最后的指向对象,将路径划分为文件路径和文件夹路径。os.path.isfile函数用来判断指定对象是否为文件。若是,返回True,否则返回False。8.2.3文件路径与文件夹路径案例101importos2print(os.path.isfile('D:\\python\\python310'))3print(os.path.isfile('C:\\Users\\WIN11\\PycharmProjects\\pythonProject\\.venv\\Scripts\\python.exe'))运行代码,结果如下:FalseTrueos.path.isdir函数用来判断指定对象是否为文件夹。若是,返回True,否则返回False。8.2.3文件路径与文件夹路径案例111importos2print(os.path.isdir('C:\\Users\\WIN11\\PycharmProjects\\pythonProject'))3print(os.path.isdir('C:\\Users\\WIN11\\PycharmProjects\\pythonProject\\.venv\\Scripts\\python.exe'))运行代码,结果如下:TrueFalseos.path.dirname函数返回文件夹路径字符串,其中包含path参数中最后一个\\之前的所有内容,结果不包含\\。8.2.3文件路径与文件夹路径案例121importos2path="C:\\Users\\WIN11\\PycharmProjects\\pythonProject\\.venv\\Scripts\\python.exe"3print(os.path.dirname(path))运行代码,结果如下:C:\Users\WIN11\PycharmProjects\pythonProject\.venv\Scriptsos.path.basename函数返回文件名字符串,其中包含path参数中最后一个\\之后的所有内容。8.2.3文件路径与文件夹路径案例131print(os.path.basename(path))运行代码,结果如下:Python.exeos.path.join函数用于连接文件夹路径和文件名。例如,根据上面的程序,合并文件夹与文件,重新得到文件的路径。8.2.3文件路径与文件夹路径案例141print(os.path.join(os.path.dirname(path),os.path.basename(path)))运行代码,结果如下:C:\Users\WIN11\PycharmProjects\pythonProject\.venv\Scripts\python.exeos.path.split函数用于分割文件夹路径和文件名。8.2.3文件路径与文件夹路径案例151print(os.path.split(path))运行代码,结果如下:('C:\\Users\\WIN11\\PycharmProjects\\pythonProject\\.venv\\Scripts','python.exe')文件的管理8.3

先定一个小目标!8.3.1管理文件夹

在python中可以构造并传递完整路径、将当前文件夹更改至正确的文件夹,或将所需文件夹添加到路径。【更改路径】

在python中,os.chdir函数用于更改当前文件夹,修改文件路径。调用格式为:8.3.1管理文件夹os.chdir(path)8.3.1管理文件夹案例16-修改当前路径1#!usr/bin/envpython32#-*-coding:UTF-8-*-3importos#导入os模块4path="D:\python"#定义新路径5#查看当前工作目录6retval=os.getcwd()7print("当前工作目录为:",retval)8#修改当前工作目录9os.chdir(path)10#查看修改后的工作目录11retval=os.getcwd()12print("目录修改成功",retval)13path1="D:\python\python310"#定义新路径14#修改当前工作目录15os.chdir(path1)16#查看修改后的工作目录17retval=os.getcwd()18print("目录修改成功",retval)

运行代码,结果如下:当前工作目录为:

C:\Users\WIN11\PycharmProjects\pythonProject目录修改成功

D:\python目录修改成功

D:\python\python3108.3.1管理文件夹【显示当前路径下的内容】在python中,os.listdir函数用于列举目录下的所有文件,返回的是列表类型。案例171importos2print(os.getcwd())3print(os.listdir(os.getcwd()))

运行代码,结果如下:C:\Users\WIN11\PycharmProjects\pythonProject['.idea','.venv','farm_logs','summary_report.txt','项目八文件源码.py']8.3.1管理文件夹案例18-列出指定目录下的文件1#!usr/bin/envpython32#-*-coding:UTF-8-*-3importos4path="D:\python\python310\Tools"#定义路径5file=os.listdir(path)#列出当前目录下的文件6print("指定目录下的文件",file)运行代码,结果如下:指定目录下的文件[‘1.txt’,’demo.txt’]8.3.2创建文件夹

在python中,os.mkdir函数用于创建文件夹。若要创建的文件夹已经存在,则python发出警告,操作失败。调用格式如下:os.mkdir(path)案例191importos2os.mkdir("D:\\NewPython")

运行代码,结果如下:8.3.2创建文件夹os.mkdir函数只能创建一级目录,要想创建多级目录,可利用os,makedirs函数。importosos.makedirs(“D:\\NewPython\\Python123”)

新建文件夹后,os.path.exists函数

用于检查位于指定路径或当前文件夹中的文件夹或文件是否存在,该命令的运行结果为逻辑值,如果存在,返回True,否则返回False。importosPath=”D:\\Python\\Python310”Print(os.path.exists(path))8.3.3删除文件夹

在python中,os.rmdir函数用来删除指定的路径。调用格式如下:其中path参数不能省略。os.rmdir(path)importosos.rmdir(“D:\\NewPython\\Python123”)#删除指定的路径8.3.4删除文件

路径是文件系统中所有文件夹的子集,python使用路径来高效定位文件。无论是路径设置还是文件夹设置,目的都是进行文件操作。

在python中,os.remove函数用来删除指定的文件。调用格式如下:os.remove(path)

importospath1=’D:\\NewPython\\python.txt’#定义文件路径os.remove(path1)#删除指定的文件8.3.5打开文件

无论要读/写的是ASCII文件还是二进制文件,都必须先用open函数将其打开。在python中,默认情况下,open函数用于以文本格式打开文件。如果文件不存在,自动创建一个空白的文本文件,如果无法打开文件,则显示OSError。调用格式如表所示。

open函数调用格式调用格式说明open(file,mode=’r’)文件路径(包括文件名称),文件打开模式为modeopen(file,mode=’r’,buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)File:文件路径(包括文件名称),必需项。mode:文件打开模式,可选项,参数如表8-2所示。buffering:设置缓冲。encoding:一般使用UTF-8。errors:报错级别。newline:区分换行符。closefd:传入的file参数类型。opener:设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。8.3.5打开文件文件打开模式类型调用格式说明t文本模式(默认)x写入模式,新建一个文件,如果该文件已存在则会报错b二进制模式+打开一个文件用于读/写(更新)U通用换行模式(不推荐)r以只读模式打开文件。文件指针在文件的开头(默认)rb以二进制模式打开一个文件用于只读。文件指针将被放在文件的开头(默认模式)。一般用于非文本文件,如图片等。r+打开一个文件用于读/写。文件指针在文件的开头(默认)rb+以二进制模式打开一个文件用于读/写。文件指针将被放在文件的开头。一般用于非文本文件,如图片等。w打开一个文件用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除,如果该文件不存在,创建新文件。wb以二进制模式打开一个文件用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除,如果该文件不存在,则创建新文件。一般用于非文本文件,如图片等。8.3.5打开文件文件打开模式类型调用格式说明w+打开一个文件用于读/写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除,如果该文件不存在,则创建新文件。wb+以二进制模式打开一个文件用于读/写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除,如果该文件不存在,创建新文件。一般用于非文本文件,如图片等。a打开一个文件用于写入(追加)。如果该文件已存在,文件指针将被放在文件的结尾。也就是说,新的内容将被写入已有内容之后,如果该文件不存在,创建新文件进行写入。ab以二进制模式打开一个文件用于写入(追加)。如果该文件已存在,文件指针将被放在文件的结尾。也就是说,新的内容将被写入已有内容之后,如果该文件不存在,创建新文件进行写入。a+打开一个文件用于读/写(追加)。如果该文件已存在,文件指针将被放在文件的结尾。如果该文件不存在,创建新文件用于读/写。ab+以二进制模式打开一个文件用于读/写(追加)。如果该文件已存在,文件指针将被放在文件的结尾,如果该文件不存在,创建新文件用于读/写。8.3.5打开文件案例20-创建文件1#!usr/bin/envpython32#-*-coding:UTF-8-*-3importos4#打开不存在的文件,创建新文件5fo=open("D:\\NewPython\\python01.txt","tw")#以文本模式打开一个用于写入6fo1=open("D:\\NewPython\\python02.txt","wb")#以二进制模式打开一个文件用于写入运行代码,结果如下:8.3.5打开文件案例21-打开文件1##!usr/bin/envpython32#-*-coding:UTF-8-*-3importos4#查看当前路径下的文件5fo=open("D:\\NewPython\\python01.txt","tw")#以文本模式打开一个用于写入6fo1=open("D:\\NewPython\\python02.txt","wb")#以二进制模式打开一个文件用于写入7print('以文本模式打开文件:','\n',fo)8print('以二进制模式打开文件:','\n',fo1)运行代码,结果如下:以文本模式打开文件:

<_io.TextIOWrappername='D:\\NewPython\\python01.txt'mode='tw'encoding='cp936'>以二进制模式打开文件:

<_io.BufferedWritername='D:\\NewPython\\python02.txt'>8.3.6关闭文件在python中,close函数用于关闭一个或所有打开的文件。调用格式如下:fileObject.close()案例22-关闭文件1#!usr/bin/envpython32#-*-coding:UTF-8-*-3importos4#查看当前路径下的文件5fo=open("D:\\NewPython\\python01.txt","tw")#以文本模式打开一个用于写入6print('打开文件为','\n',)#显示文件名7fo.close()运行代码,结果如下:

打开文件为:D:\NewPython\pyhon01.txt8.3.6关闭文件

打开文件后,需要及时关闭文件,否则可能引起不必要的麻烦。如果打开的文件显示异常,那么将不能正常关闭。为了避免此问题,可以使用python提供的with语句,实现进行文件处理时,无论是否显示异常,都能保证运行完毕后关闭已经打开的文件。调用格式如下:withexpressinastarget:with-body

其中,expressin用于指定表达式;target用于指定一个变量,将expressin中的值保存到变量中;with-body为要执行的相关操作,可以直接使用pass语句代替。例如:withopen(“D:\\NewPython\\python01.txt”,”w”)asfilepass8.3.7文件属性

在python中,os.path.getsize函数用来获取文大小(以字节为单位),如果输入值为文件夹路径,返回0。例如:案例231importos2#定义文件路径3path1='C:\\Users\\WIN11\\PycharmProjects\\pythonProject\\.venv\\Scripts\\python.exe'4dir1='D:\\NewPython'#定义文件目录5print(os.path.getsize(path1))#计算文件大小6print(os.path.getsize(dir1))#计算文件夹大小运行文件,结果如下:27010408.3.7文件属性

关于文件的时间属性,包括文件的创建时间、最后修改时间和最后访问时间。相关函数的调用格式如表所示。查看文件的时间属性相关函数的调用格式调用格式说明os.path.getmtime(path)文件(或文件夹)的最后修改时间,从新纪元到访问时的秒数。(新纪元表示时间的开始,取决于平台,例如对于UNIX平台,新纪元是世界协调时间1970年1月1日00:00:00)os.path.getatime(path)文件(或文件夹)的最后访问时间,从新纪元到访问时的秒数os.path.getctime(path)文件(或文件夹)的创建时间,从新纪元到访问时的秒数8.3.7文件属性案例24-显示图8-1所示图像文件信息1#!usr/bin/envpython32#-*-coding:UTF-8-*-3importos4#查看当前路径下的文件5file='D:\\NewPython\\nongye.jpg'#指定nongye.jpg文件路径6#文件的时间属性函数7time1=os.path.getmtime(file)8time2=os.path.getatime(file)9time3=os.path.getctime(file)10filesize=os.path.getsize(file)#计算文件大小11print("文件的创建时间:",time1)12print("文件的最后修改时间:",time2)13print("文件的最后访问时间:",time3)14print("文件大小:",filesize)运行文件,结果如下:文件的创建时间:

1753326181.1574214文件的最后修改时间:

1753326231.3040478文件的最后访问时间:

1753326184.8420188文件大小:

328707读/写文本文件8.4

先定一个小目标!8.4读/写文本文件

熟悉读/写文本文件,能够在程序中读/写文本文件。

在python中,使用write函数将数据写入文本文件。调用格式如下:8.4.1写文本文件fileObject.write([str])

其中,fileObject为要打开的文件对象,str为要写入文件的字符串。8.4.1写文本文件案例25-将字符串写入文本文件1#!usr/bin/envpython32#-*-coding:UTF-8-*-3importos4fromimportlib.metadataimportfiles5path1="D:\\NewPython"#定义文件路径6os.chdir(path1)#更改当前路径7files=os.listdir(os.getcwd())#列出当前路径下的文件8print("当前路径下的文件:",files)9fo=open("python01.txt","w")#以写入模式打开文件10print("打开文件的文件名为",)11str='Xis%4.2fmetersor%8.3fmm\n'#定义要写入的字符串12fo.write(str)#将字符串写入文件13fo.close()#关闭文件运行代码,结果如下:当前路径下的文件:['nongye.jpg','python01.txt','python02.txt','verse.txt']打开文件的文件名为

python01.txt8.4.1写文本文件打开python01.txt文件,显示要写入的字符串,如图所示。8.4.1写文本文件案例26-将字符串以二进制模式写入文本文件1#!usr/bin/envpython32#-*-coding:UTF-8-*-3importos4path1="D:\\NewPython"#定义文件路径5os.chdir(path1)#更改当前路径6fo=open("python02.txt","wb")#以写入模式打开文件7print("打开文件的文件名为",)8str='sin(x)\ncos(x)'#定义要写入的字符串9#对字符串进行编码10str1=str.encode('utf-8')11fo.write(str1)#将字符串写入文件12fo.close()#关闭文件运行代码,结果如下:打开文件的文件名为

python01.txt8.4.1写文本文件打开python02.txt文件,显示写入的字符串,如图所示。8.4.1写文本文件

在python中,使用writelines函数将字符序列写入文本文件。调用格式如下:fileObject.writelines([str])

其中,fileObject为要打开的文件对象:str为要写入文件的字符序列。换行需要输入换行符\n。8.4.1写文本文件案例27-将列表数据写入文本文件1#!usr/bin/envpython32#-*-coding:UTF-8-*-3importos4path1="D:\\NewPython"#定义文件路径5os.chdir(path1)#更改当前路径6fo=open("python02.txt","w+")7print("创建文件",)8str1='玉米\n'#定义要写入的字符串9str2='种类:农作物\n'10str3='面积:400公顷\n'11str4='种植者:刘\n'12str5='种植时间:2024_5_28\n'13str6='种植地址:河北省保定市\n'14list=[str1,str2,str3,str4,str5,str6]#创建列表15fo.writelines(list)#将列表数据写入文件16fo.close()#关闭文件运行代码,结果如下:创建文件

python.txt8.4.1写文本文件打开python02.txt文件,显示写入的列表数据,如图所示。8.4.2读文本文件在python中,用于读取文本文件中的数据的函数包括3种。其中调用格式如表所示。表读取文本文件函数的调用格式调用格式说明file.read([size])file表示已打开的文件对象,size作为一个可选参数,用于指定一次最多可读取的字符(字节)数,如果省略,则默认一次性读取所有内容。fileObject.readlines()读取所有行(直到结束符EOF)并返回列表fileObject.readline(size)从文件读取整行,包括\n字符。如果指定了一个非负参数,则返回指定大小的字节数,包括\n字符。size表示从文件中读取的字节数。8.4.2读文本文件案例28-一次性读取文本文件的指定行1#!usr/bin/envpython32#-*-coding:UTF-8-*-3importos4path1="D:\\NewPython"#定义文件路径5os.chdir(path1)#更改当前路径6fo=open("python01.txt","rb+")#以二进制模式打开文件,可读可写7print("要读取的文件:",)8line=fo.read(10)#指定一次最多可读取的字符9print("读取的字符串:",line)10fo.close()#关闭文件运行代码,结果如下:要读取的文件:

python01.txt读取的字符串:

b'Xis%4.2f'8.4.2读文本文件案例29-一次读取文本文件的所有行1#!usr/bin/envpython32#-*-coding:UTF-8-*-3importos4path1="D:\\NewPython"#定义文件路径5os.chdir(path1)#更

温馨提示

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

评论

0/150

提交评论