当前位置: 首页 > 后端技术 > Python

图形蟒蛇-文件读写

时间:2023-03-26 16:52:32 Python

作者:韩信子@ShowMeAI教程地址:http://www.showmeai.tech/tuto...本文地址:http://www.showmeai.tech/article-detail/85免责声明:版权所有,转载请联系平台及作者并注明出处1、python读写文件是最常见的操作之一。Python内置了读写文件的函数,整体上还是比较方便的。读写磁盘文件的功能是由操作系统提供的。读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后通过操作系统提供的接口从文件对象中读取。数据(读取文件),或将数据写入此文件对象(写入文件)。2.open方法Python内置了open()函数,用于读写文件。使用open()方法操作文件就像把大象塞进冰箱一样。分为三步,一是打开文件,二是操作文件,三是关闭文件。open()方法的返回值是一个文件对象,可以赋给一个变量(文件句柄)。基本语法格式为:f=open(filename,mode)PS:在Python中,所有具有读写方法的对象都可以归为文件类型。并且所有文件类型对象都可以使用open方法打开,close方法结束,由with上下文管理器管理。这是Python的设计哲学之一。filename:一个字符串值,包含要访问的文件的名称,通常是文件路径。mode:打开文件有多种模式,默认是只读模式r。一个简单的例子:#打开一个文件f=open("/tmp/foo.txt","w")f.write("Python是一种非常好的语言。\n我喜欢Python!!\n")#关闭openfilef.close()(1)打开方式:mode操作说明r只读默认模式,如果文件不存在,则报错,如果存在,则正常读取。w只写如果文件不存在,则创建一个新文件,然后写入;如果存在,先清空文件内容,再写入。aAppend如果文件不存在,新建一个文件,然后写入;如果存在,则追加并写入文件末尾。如果文件存在,则会报错。如果不存在,它会创建一个新文件,然后写入内容。它比w模式更安全。b二进制模式,如rb、wb、ab,以字节为单位操作数据+读写模式,如r+、w+、a+(2)b模式二进制模式,通常用于读取图片、视频等二进制文件。注意,读写时是以bytes类型读写的,所以获取的是bytes对象,而不是字符串。在这个读写过程中,需要自己指定编码格式。使用带b的mode时,一定要注意传入的数据类型,确保是bytes类型。(代码学习可以在在线python3环境下运行):s='ShowMeAI是数据科学和人工智能领域的数据库和学习社区'b=bytes(s,encoding='utf-8')f=open('test.txt','w')f.write(s)#这个没问题,文件写入正常。#------------------------------------------------s="ShowMeAI是数据科学和人工智能领域的数据库和学习社区。\n我喜欢ShowMeAI!!\n"b=bytes(s,encoding='utf-8')f=open('test_b.txt','wb')#注意多了bf.write(s)#ErrorTypeError:abytes-likeobjectisrequired,not'str'#说明需要一个bytes类型的数据,但是你给的一个字符串#------------------------------------------------s="ShowMeAI是数据科学和人工智能领域的数据库和学习社区。\n我喜欢ShowMeAI!!\n"b=bytes(s,encoding='utf-8')f=open('test_b.txt','wb')#注意多了一个bf.write(b)#把变量b传给它,b是bytes类型(3)+mode对于w+模式,内容读写前会清空文件,建议不要使用!对于a+模式,只能永远写在文件末尾,有局限性,建议不要使用!对于r+模式,即读写模式,配合seek()和tell()方法,可以实现更多的操作。3、文件编码读取非UTF-8编码的文件,需要将encoding参数传给open()函数,例如读取GBK编码的文件:>>>f=open('gbk.txt','r',encoding='gbk')>>>f.read()'GBK'在遇到一些编码不规则的文件时可能会抛出UnicodeDecodeError异常,也就是说文件中可能混入了一些非法编码的字符。在这种情况下,可以提供errors参数来指示如何处理编码错误。>>>f=open('gbk.txt','r',encoding='gbk',errors='ignore')4.文件对象操作每当我们使用open方法打开一个文件时,一个文件对象就会被回。这个对象有很多内置的操作方法。下面假设已经打开了一个f文件对象。(1)read函数读取一定大小的数据,然后以字符串或字节对象的形式返回。size是一个可选的数字参数,用于指定要读取的数据量。当size被省略或为负数时,文件的全部内容将被读取并返回。f=open("test.txt","r")str=f.read()print(str)f.close()如果文件较大,请不要使用read()方法读入一次存储内存,但它是逐位读取(512)的。(2)readline函数从文件中读取一行n行内容。换行符是'\n'。如果返回空字符串,则表示已读取最后一行。这种方法一般是读一行,处理一行,不能后退,只能向前,读到的行不能再读。f=open("test.txt","r")str=f.readline()print(str)f.close()(3)readlines函数逐行读取文件中的所有行,放入一个list,作为列表的元素一个一个地排序,并返回这个列表。readlines方法会一次性将所有文件读入内存,存在一定的风险。但它的优点是每一行都存储在一个列表中,可以随意访问。f=open("test.txt","r")a=f.readlines()print(a)f.close()(4)遍历文件其实更多的时候,我们使用文件对象作为迭代设备使用。#打开一个文件f=open("test.txt","r")forlineinf:print(line,end='')#关闭打开的文件f.close()这个方法很简单,不用to文件是一次性读出来的,但是也没有提供很好的控制。和readline方法一样,只能前进不能后退。几种不同的文件读取遍历方法对比:如果文件很小,一次性读取最方便的是read()。如果无法确定文件大小,则反复调用read(size)更为安全。如果是配置文件,调用readlines()最方便。通常,使用for循环更好更快。(5)write函数将字符串或字节数据写入文件。write()动作可以重复多次。其实就是在内存中操作,不会马上写回硬盘。在执行close()方法之前,所有的写操作都不会反映到硬盘上。在此过程中,如果想立即将内存中的修改保存到硬盘中,可以使用f.flush()方法,但这样可能会造成数据不一致。#打开一个文件f=open("/tmp/foo.txt","w")f.write("ShowMeAI是一个数据科学和人工智能领域的数据库和学习社区。\n我喜欢ShowMeAI!!\n")#关闭打开的文件f.close()(6)tell函数返回文件读写指针的当前位置,即从文件开头算起的字节数。一定要注意,是字节数,不是字符数。(7)seek函数如果想改变position指针的位置,可以使用f.seek(offset,from_what)方法。seek()通常与tell()方法结合使用。from_what的值,如果为0表示从文件头开始计算,如果为1表示从文件读写指针的当前位置开始计算,2表示从文件末尾开始计算文件,默认为0,例如:offset:表示偏移量。seek(x,0):从起始位置开始移动x个字符,即文件第一行的第一个字符seek(x,1):表示从当前位置向后移动x个字符seek(-x,2):表示从文件末尾向前移动x个字符loveShowMeAI!!\n")60>>>f.tell()60>>>f.seek(5)5>>>f.read(6)b'eAI是'>>>f.seek(-3,2)92>>>f.read(2)b'!!'(8)close函数关闭文件对象,当处理完一个文件后,调用f.close()关闭文件,释放系统资源。文件关闭后,如果再次调用文件对象,会抛出异常会抛出,如果忘记调用close(),可能会导致只有部分数据写入磁盘,其他内容丢失。也就是说,“大象塞进冰箱后,不要t忘记关冰箱门。”5.with关键字with关键字用在Python的上下文管理器机制中。为了防止open等文件打开方法在运行过程中出现异常或错误,或者忘记执行最后close方法,文件异常关闭,可能导致文件泄露损坏,Python提供了with上下文管理器机制,保证文件正常关闭,在它的管理下,不需要写一个关闭语句。注意缩进。withopen('test.txt','w')asf:f.write('Hello,ShowMeAI!')with支持同时打开多个文件:withopen('log1')asobj1,open('log2','w')asobj2:s=obj1.read()obj2.write(s)6.视频教程也可以点这里查看B站有【中英文字幕】的版本https://www.bilibili.com/vide...https://www.bilibili.com/video...资料及代码下载本教程系列代码可在ShowMeAI对应的github上下载。可以在本地python环境运行,会科学上网的宝宝也可以直接使用googlecolab运行,一键交互学习!本系列教程涉及的Python备忘单可在以下地址下载:Python备忘单扩展参考资料Python教程-Python3文档Python教程-廖雪峰官网ShowMeAI相关文章推荐python基本数据类型python运算符python条件控制和if语句python循环语句pythonwhile循环pythonfor循环pythonbreak语句pythoncontinue语句pythonpass语句python字符串和操作pythonlistpythontuplepython字典pythonsetpython函数python迭代器和生成器Python数据结构Python模块Python文件读写Python文件和目录操作Python错误和异常处理Python面向对象编程PythonNamespaceandScopePythonTimeandDateShowMeAI系列教程推荐图Python编程:从入门到精通系列教程图解数据分析:从入门到精通系列教程ls图解AI数学基础:从入门到大师系列教程图解大数据技术:从入门到大师系列教程