这篇文章将为大家详细讲解有关Python中读的函数如何按字节(字)符读取文件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
文件对象提供了阅读()方法来按字节或字符读取文件内容,到底是读取宇节还是字符,则取决于是否使用了b模式,如果使用了b模式,则每次读取一个字节;如果没有使用b模式,则每次读取一个字符。在调用该方法时可传入一个整数作为参数,用于指定最多读取多少个字节或宇符。
例如,如下程序采用循环读取整个文件的内容:
f =,开放(“read_test.py", & # 39; " # 39;,,真的) while 真正的: ,,,#,每次读取一个字符 ,,,ch =, f.read (1) ,,,#,如果没有读到数据,跳出循环 ,,,if not ch:打破 ,,,#,输出ch ,,,print (ch,,=& # 39; & # 39;) f.close ()
上面程序采用循环依次读取每一个字符(因为程序没有使用b模式),每读取到一个字符,程序就输出该字符。
正如从上面程序所看到的,当程序读写完文件之后,推荐立即调用关闭()方法来关闭文件,这样可以避免资源泄露。如果需要更安全地关闭文件,推荐将关闭文件的关闭()方法调用在最后块中执行。例如,将上面程序改为如下形式:
f =open (“test.txt" & # 39; " # 39;,真的) 试一试: ,,,while 正确的: ,,,,,,,#每次读取一个字符 ,,,,,,,ch =, f.read (1) ,,,,,,,#如果没有读取到数据,则跳出循环 ,,,,,,,if not ch:打破 ,,,,,,,#输出ch ,,,,,,,印刷(ch,,=& # 39; & # 39;) ,,,最后: ,,,,,,,f.close ()
如果在调用读()方法时不传入参数,该方法默认会读取全部文件内容,例如如下程序:
f =,开放(“test.txt", & # 39; " # 39;,,真的) #,直接读取全部文件 print (f.read ()) f.close ()
通过上面两个程序,读者可能已经发现了一个问题,当使用open()函数打开文本文件时,程序使用的是哪种字符集呢?总是使用当前操作系统的字符集,比如Windows平台,打开()函数总是使用GBK字符集,因此,上面程序读取的测试。txt也必须使用GBK字符集保存,否则,程序就会出现UnicodeDecodeError错误。
如果要读取的文件所使用的字符集和当前操作系统的字符集不匹配,则有两种解决方式:
使用二进制模式读取,然后用字节的decode()方法恢复成字符串。
利用解码器模块的open()函数来打开文件,该函数在打开文件时允许指定字符集。
下面程序使用二进制模式来读取文本文件:
#,指定使用二进制方式读取文件内容 f =,开放(“read_test3.py", & # 39; rb # 39;,,真的) #,直接读取全部文件,并调用字节的解码将字节内容恢复成字符串 打印(f.read () .decode (& # 39; utf - 8 # 39;)) f.close ()
上面程序在调用open()函数时,传入了rb模式,这表明采用二进制模式读取文件,此时文件对象的阅读()方法返回的是字节对象,程序可调用字节对象的decode()方法将它恢复成字符串。由于此时读取的read_test3。py文件是以utf - 8的格式保存的,因此程序需要使用解码()方法恢复字符串时显式指定使用utf - 8字符集。
下面程序使用码模块的open()函数来打开文件,此时可以显式指定字符集:
import 编解码器 #指定使用utf-8 字符集读取文件内容 时间=f codecs.open (“read_test4.py",, & # 39; " # 39;,, & # 39; utf - 8 # 39;,,缓冲=True) while 真正的: ,,,#每次读取一个字符 ,,,ch =, f.read (1) ,,,#如果没有读取到数据,则跳出循环 ,,,if not ch :打破 ,,,#输出ch ,,,print (ch,,=& # 39; & # 39;) f.close ()
关于Python中读的函数如何按字节(字)符读取文件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。