前言时刻:今天挑战完成day08和day09。今天主要学习了文件的读写,总结一下:学习了读文件:r,rb,r+,r+b,写:w,wb,w+,w+b文件句柄,seekcursor,flushforce刷新文件内容,tell:告诉当前句柄的位置(int)Day09:函数的定义传参:实参、形参1、文件操作Python中文件操作很重要,虽然是不难,但是有很多坑,比如:文件的编码方式。如果你了解Python的编码方式,这不是问题。具体可以参考我之前的文章:Python文件编码问题。还有很多应用场景,比如机器学习中的数据读写,网络爬虫的数据访问等等。open(file,mode='w',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)参数说明:file:必填,文件路径(相对或绝对路径)。mode:可选,文件操作模式write:w,wb,w+,wb+,read:r,rb,r+,rb+buffering:setbufferencoding:如果不设置,默认与操作系统默认编码相同.比如:MacOS上是UTF-8,Windows上是gbk,但是win10上改成UTF-8,Linux上是UTF-8。根据相同的解码和编码原理,有UTF-8、GBK等errors:报错级别newline:区分换行符closefd:传入文件参数类型opener:设置一个自定义的opener,opener的返回值必须是一个打开的文件描述符。1.1.写文件操作的写法如下:w写Unicode的文件内容,wb写的是二进制文件内容,w+可以读写,加号相当于增加了一个函数,wb+可以读写二进制文件。#1.比较麻烦的一种方式,file_name="write_test.txt"f=open('write_test.txt',mode='w',encoding="utf8")#定义操作文件的句柄f,f.write("Thisisa")#写入内容f.close()#关闭文件句柄#2、with推荐使用方式是结束后自动关闭句柄withopen("write_test.txt",mode='w',encoding="utf8")asf,open("test2.txt",'w',encoding="utf8")asf2:f.write("我是主流读取文件的方式。")f2.write("with多个文件可以并行操作。")1.2.读写文件的模式有:r读取Unicode的文件内容,rb读取二进制的文件内容,r+可以读也可以写,加号相当于增加了一个函数,rb+可以读写二进制文件。需要掌握读取文件的方法。"""write_test.txt文件内容:我主流的读取方式是用.hi第二行"""读取方式:使用f.read()方式读取文件不推荐,因为它会将文件的所有数据一次性读入内存。#1.read方法withopen("write_test.txt",mode='r',encoding="utf8")asf:content=f.read()print(content)#1.2、读取前n个字符print(f.tell())#53告诉当前光标位置f.seek(0)#seek将光标移动到0位置单位是bytebyteprint(f.read(4))#我是主流的read(n)读取前n个字符f.tell()以字节为单位返回当前文件句柄的光标位置。f.seek(number)将光标移动到数字所在位置,单位为字节。f.read(number)读取当前光标后面的数字字符。解释字符和字符的区别。对于英文字母,一个字符=一个字节,而对于中文,一个汉字=3个字节。还是数据编码的问题,哈哈,看懂了,到这里就soeasy了。readline和readlines方法:f.readline()读取当前光标所在行光标后的内容。"""write_test.txt内容:我喜欢学习Python"""#2.readlinewithopen("write_test.txt",mode='r',encoding="utf8")asf:f.seek(10)content=f.readline()print(content)#学Python讲解,首先我用seek(7)将光标移动到第七个字节(“learning”占6个字节+后面跟一个换行符)一个自字节+"第二行的learning”占3个字节),在第二行的learning之后,再用readline()读取“learningPython”。f.readlines()返回文件中所有行的列表,以换行符分隔。#3.readlineswithopen("write_test.txt",mode='r',encoding="utf8")asf:content=f.readlines()print(content,type(content))#['我是主流with读取文件的方式。\n','hisecondline']
