文件处理文件处理的作用是存储一些内容(数据),下次执行程序时可以直接使用。Python提供了open关键字来处理文件读写。语法open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)file参数表示文件名,如果不包含路径,会在当前文件夹中搜索,mode参数代表文件的打开方式。打开方式有多种,如下表所示。操作系统打开文件,对应一块硬盘空间,返回一个文件对象赋值给一个变量ff=open('a.txt','r',encoding='utf-8')#默认openmodeisr#2.调用文件对象下的read/write方法会被操作系统转换为读写硬盘操作data=f.read()#3.向操作系统发起请求关闭文件回收系统资源f.close()和上下文管理每次打开和处理文件都需要手动关闭文件,比较麻烦。Python提供了with关键字帮助我们自动关闭文件withopen('a.text','r',encoding='utf-8')asf:data=f.read()print(data)字符集编码,如果你打开一个文本文件,会涉及到字符编码的问题,如果你没有为open指定一个编码,那么打开文本文件显然是操作系统说了算,操作系统会使用自己默认的编码打开文件,windows下是gbk,linux下是utf-8。f=open('a.txt','r',encoding='utf-8')operationfilemode模式函数r以只读方式打开,默认w以写方式打开,如果文件存在则删除itfirst,然后重新创建一个Openappendmode,追加到文件末尾,seek()指向其他地方没用,文件不存在,自动创建bbinarymodeopenttextmodeopen,default+readableand可写模式,可以和其他模式一起使用,比如r+,w+x如果文件已经存在,用这种模式打开会出现异常UUniversalnewlinesupportinp_name=input('请输入用户名:').strip()inp_pwd=input('请输入密码:').strip()withopen(r'db.txt',mode='r',encoding='utf-8')asf:forlineinf:#将用户输入的名称和密码与读取的内容进行比较u,p=line.strip('\n').split(':')ifinp_name==uandinp_pwd==p:print('登录成功')breakelse:print('账号或密码错误')withopen('b.txt',mode='w',encoding='utf-8')asf:f.write('你好\n')f.write('我很好\n')f.write('大家好\n')f.write('111\n222\n333\n')#强调:#1在文件未关闭的情况下,连续写入,后面写入的内容必须跟在前面写入的内容#2如果再次以w模式打开文件,文件内容将becleared#aonlyappendwritemode:当文件不存在时会创建一个空文件,如果文件存在则文件指针直接移动到文件末尾withopen('c.txt',mode='a',encoding='utf-8')asf:f.write('44444\n')f.write('55555\n')#强调w模式和a模式的异同:#1相同点:当打开的文件没有关闭,连续写入时,新写入的内容会一直在之前写入的内容之后#2不同点:修改了a以同样的方式再次打开文件,原来的文件内容不会被清除,文件指针直接移动到文件末尾,新写入的内容永远写在末尾。文件操作方法#读取操作f.read()#读取所有内容并执行此操作后,文件指针会移动到文件末尾f.readline()#读取一行内容,光标移动到第二行的开头f.readlines()#读取每一行内容并存储到列表中#重点:#f.read()和f.readlines()都将内容一次性读入content.如果内容过多导致内存溢出,想要将所有内容读入内存,必须分多次读取。有两种实现方法:#方法一withopen('a.txt',mode='rt',encoding='utf-8')asf:forlineinf:print(line)#只读一行contentintomemoryMedium#Method2withopen('1.mp4',mode='rb')asf:whileTrue:data=f.read(1024)#只读1024Bytes到内存中同时iflen(data)==0:breakprint(data)#写操作f.write('1111\n222\n')#文本模式写,需要自己写一个换行符f.write('1111\n222\n'.encode('utf-8'))#b模式写入需要自己写换行f.writelines(['333\n','444\n'])#Filemodef.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')])#b模式其他操作f.readable()#文件是否可读f.writable()#文件是否可读f.closed#文件是否关闭f.encoding#如果文件打开方式为b,则没有该属性f.flush()#立即刷新从内存到硬盘的文件内容斯克
