Python中读的函数如何按字节(字符)读取文件

  介绍

这篇文章将为大家详细讲解有关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中读的函数如何按字节(字)符读取文件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

Python中读的函数如何按字节(字符)读取文件