open的文件读取操作,utf-8,UnicodeDecodeError - 落日峡谷

文章推薦指數: 80 %
投票人數:10人

Python通过创建文件对象,进行磁盘文件的读写(IO)。

主要函数:def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None ... 首页 新闻 博问 专区 闪存 班级 我的博客 我的园子 账号设置 简洁模式... 退出登录 注册 登录 落日峡谷 Python:open的文件读取操作,utf-8,UnicodeDecodeError 简要目录: open函数 将文件设置为utf-8编码格式 UnicodeDecodeError f.read()和f.read(size) f.readline()和f.readlines() f.tell():返回文件指针的位置,注意换行符 f.writelines()和 f.write() f.seek():设置文件指针的位置—— f.seek(偏移量,[起始位置]) 文件指针 withopen:可以不需要显式关闭文件操作:f.close() f.__next__():读取下一行 mode的详细参数   Python通过创建文件对象,进行磁盘文件的读写(IO)。

主要函数:defopen(file,mode='r',buffering=None,encoding=None,errors=None,newline=None,closefd=True) file:指的是文件路径 mode:读写模式,单个的模式主要有: buffering:缓存模式 encoding:编码格式 newline:要是针对不同操作系统的换行符不一致产生的策略 部分参数解释: mode:(可组合) ======================================================================== CharacterMeaning ------------------------------------------------------------------------ 'r'openforreading(default) 'w'openforwriting,truncatingthefilefirst 'x'createanewfileandopenitforwriting 'a'openforwriting,appendingtotheendofthefileifitexists 'b'binarymode 't'textmode(default) '+'openadiskfileforupdating(readingandwriting) 'U'universalnewlinemode(deprecated) ======================================================================== buffering: bufferingisanoptionalintegerusedtosetthebufferingpolicy. Pass0toswitchbufferingoff(onlyallowedinbinarymode),1toselect linebuffering(onlyusableintextmode),andaninteger>1toindicate thesizeofafixed-sizechunkbuffer.Whennobufferingargumentis given,thedefaultbufferingpolicyworksasfollows: *Binaryfilesarebufferedinfixed-sizechunks;thesizeofthebuffer ischosenusingaheuristictryingtodeterminetheunderlyingdevice's "blocksize"andfallingbackon`io.DEFAULT_BUFFER_SIZE`. Onmanysystems,thebufferwilltypicallybe4096or8192byteslong. *"Interactive"textfiles(filesforwhichisatty()returnsTrue) uselinebuffering.Othertextfilesusethepolicydescribedabove forbinaryfiles. newline: newlinecontrolshowuniversalnewlinesworks(itonlyappliestotext mode).ItcanbeNone,'','\n','\r',and'\r\n'.Itworksas follows: *Oninput,ifnewlineisNone,universalnewlinesmodeis enabled.Linesintheinputcanendin'\n','\r',or'\r\n',and thesearetranslatedinto'\n'beforebeingreturnedtothe caller.Ifitis'',universalnewlinemodeisenabled,butline endingsarereturnedtothecalleruntranslated.Ifithasanyof theotherlegalvalues,inputlinesareonlyterminatedbythegiven string,andthelineendingisreturnedtothecalleruntranslated. *Onoutput,ifnewlineisNone,any'\n'characterswrittenare translatedtothesystemdefaultlineseparator,os.linesep.If newlineis''or'\n',notranslationtakesplace.Ifnewlineisany oftheotherlegalvalues,any'\n'characterswrittenaretranslated tothegivenstring. 具体示例: 1.首先建立文件如下,使用utf-8编码:打开原txt-->输入文本-->另存为utf-8-->覆盖原txt【将文件设置为utf-8编码格式】 2. UnicodeDecodeError:'gbk'codeccan'tdecodebyte0xa4inposition54:illegalmultibytesequence 出现这个错误时,一般是因为encoding未设置造成,例如: f1=open(path,'r') a=f1.read()#read()一次读取全部内容,数据量很大时建议使用readline或者read(1024)等,1024表示字节数 #UnicodeDecodeError:'gbk'codeccan'tdecodebyte0xa4inposition54:illegalmultibytesequence print(a) f1.close() 解决: f2=open(path,'r',encoding='utf-8') a=f2.read()#read()一次读取全部内容,数据量很大时建议使用readline或者read(1024)等,1024表示字节数 print(a) f2.close() 3.f.read()和f.read(size) f.read():一次读取整个文件 f.read(size):一次读取size字节大小的数据 #------------------------------ f2=open(path,'r',encoding='utf-8') a=f2.read()#read()一次读取全部内容,数据量很大时建议使用readline或者read(1024)等,1024表示字节数 print(a) f2.close() #------------------------------ f3=open(path,'r',encoding='utf-8') a=f3.read(4)#数据量很大时建议使用readline或者read(size)等,size表示字节数 print(a) f3.close() 4.f.readline()和f.readlines() f.readline():每次读取一行,注意文件指针的位置 f.readlines():一次读取多行,构成list #------------------------------ f4=open(path,'r',encoding='utf-8') a=f4.readline()#readline()一次读取一行 print(a) f4.close() #----------------------------- f5=open(path,'r',encoding='utf-8') a=f5.readlines()#readlines()一次读取多行,构成list,可以用于迭代 print('a:',a) f5.close() 5.f.tell():返回文件指针的位置,注意换行符 f7=open(path,'r',encoding='utf-8') a=f7.readline()#readlines()一次读取多行,构成list,可以用于迭代 print(a) cc=f7.tell()#返回文件当前位置 print(cc) f7.close() 6. f.writelines():向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

r+:文件指针从开头开始读写 w+:打开一个文件用于读写。

如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。

如果该文件不存在,创建新文件。

f8=open(path,'r+',encoding='utf-8')#r+文件指针从开头开始读写 a=f8.readlines()#readlines()一次读取多行,构成list,可以用于迭代 print('a:',a) f8.writelines(['\n陈王昔时宴平乐,斗酒十千恣戏虐\n','哎,李白'])#向文件写入一个序列字符串列表,此时文件指针在结尾处,相当于追加了 dd=f8.read() print('dd:',dd)#此时文件指针在末尾,所以为空 f8.close() 7.f.write():写入单个字符串 f9=open(path,'r+',encoding='utf-8')#r+文件指针从开头开始读写 a=f9.readlines()#readlines()一次读取多行,构成list,可以用于迭代 print('a:',a) f9.write('\n陈王昔时宴平乐,斗酒十千恣戏虐')#通过上述读操作,文件指针在结尾处;此时写操作也会在结尾处进行 b=f9.read() print('b:',b)#为空,因为文件指针的位置 f9.close() 8.f.seek():用于设置文件指针的位置—— f.seek(偏移量,[起始位置]) a+:打开一个文件用于读写。

如果该文件已存在,文件指针将会放在文件的结尾。

文件打开时会是追加模式。

如果该文件不存在,创建新文件用于读写。

f10=open(path,'r',encoding='utf-8') a=f10.readlines()#readlines()一次读取多行,构成list,可以用于迭代 print('a:',a) f10.close() f11=open(path,'a+',encoding='utf-8')#a+模式用于追加 f11.write('\n陈王昔时宴平乐,斗酒十千恣戏虐') b=f11.read() print('b:',b)#这里值为空,是因为文件指针此时在文件的末尾;如果要读数据,需要设置文件指针的位置 f11.seek(6,0)#f.seek(偏移量,[起始位置]),用来移动文件指针;偏移量:单位为比特(字节),可正可负;起始位置:0-文件头,默认值;1-当前位置;2-文件尾 b=f11.read() print('b:',b) f11.close() 9.文件指针 #文件指针 f12=open(path,'a+',encoding='utf-8')#a+模式用于追加 f12.write('\n陈王昔时宴平乐,斗酒十千恣戏虐') c=f12.tell()#返回文件当前位置,因为a+,所以上述的write操作在末尾进行,然后文件指针也在末尾了:269 print('c:',c) f12.seek(6,0)#f.seek(偏移量,[起始位置]),用来移动文件指针;偏移量:单位为比特(字节),可正可负;起始位置:0-文件头,默认值;1-当前位置;2-文件尾 d=f12.tell()#返回文件当前位置,经过偏移之后为:6 print('d:',d) e=f12.read()#读取整个文件,读完后又到末尾了 print('e:',e) f=f12.tell()#返回文件当前位置,此时在末尾:269 print('f:',f) f12.close() 10.withopen:可以不需要显式关闭文件操作:f.close() f.__next__():读取下一行 #------------------------------------ #2.withopen:可以不需要显式关闭文件操作:f.close withopen(path,'r',encoding='utf-8')asf13: a=f13.readlines()#readline()一次读取一行 print(a) #下一行:f.__next__() withopen(path,'r',encoding='utf-8')asf13: a=f13.readline()#readline()一次读取一行 print('a:',a) b=f13.__next__() print('b:',b)  11.mode的详细参数(来自菜鸟教程): 模式描述 t 文本模式(默认)。

x 写模式,新建一个文件,如果该文件已存在则会报错。

b 二进制模式。

+ 打开一个文件进行更新(可读可写)。

U 通用换行模式(不推荐)。

r 以只读方式打开文件。

文件的指针将会放在文件的开头。

这是默认模式。

rb 以二进制格式打开一个文件用于只读。

文件指针将会放在文件的开头。

这是默认模式。

一般用于非文本文件如图片等。

r+ 打开一个文件用于读写。

文件指针将会放在文件的开头。

rb+ 以二进制格式打开一个文件用于读写。

文件指针将会放在文件的开头。

一般用于非文本文件如图片等。

w 打开一个文件只用于写入。

如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。

如果该文件不存在,创建新文件。

wb 以二进制格式打开一个文件只用于写入。

如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。

如果该文件不存在,创建新文件。

一般用于非文本文件如图片等。

w+ 打开一个文件用于读写。

如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。

如果该文件不存在,创建新文件。

wb+ 以二进制格式打开一个文件用于读写。

如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。

如果该文件不存在,创建新文件。

一般用于非文本文件如图片等。

a 打开一个文件用于追加。

如果该文件已存在,文件指针将会放在文件的结尾。

也就是说,新的内容将会被写入到已有内容之后。

如果该文件不存在,创建新文件进行写入。

ab 以二进制格式打开一个文件用于追加。

如果该文件已存在,文件指针将会放在文件的结尾。

也就是说,新的内容将会被写入到已有内容之后。

如果该文件不存在,创建新文件进行写入。

a+ 打开一个文件用于读写。

如果该文件已存在,文件指针将会放在文件的结尾。

文件打开时会是追加模式。

如果该文件不存在,创建新文件用于读写。

ab+ 以二进制格式打开一个文件用于追加。

如果该文件已存在,文件指针将会放在文件的结尾。

如果该文件不存在,创建新文件用于读写。

默认为文本模式,如果要以二进制模式打开,加上 b 。

  参考: https://www.cnblogs.com/mengyu/p/6638975.html https://www.runoob.com/python/file-methods.html postedon 2020-05-1912:07  落日峡谷  阅读(7573)  评论(0)  编辑  收藏  举报 刷新评论刷新页面返回顶部 导航 Poweredby: 博客园 Copyright©2022落日峡谷 Poweredby.NET6onKubernetes



請為這篇文章評分?