Python 完美诠释高内聚概念的 IO 流 API 体系结构(全网最详细) (4)

readline( ) 还有一个兄弟 readlines() 。把数据以行为单位一次性存储一个列表中.

file = open("guo_ke.txt", "r") print("-----------把文件中数据以行为单位存储在列表中---------") res = file.readlines() print(res) file.close() ''' 输出结果 -----------把文件中数据以行为单位存储在列表中--------- ['You hide in my heart deeply.\n', 'Happiness! There is only you and I together time...\n', "With you just I don't want to give anyone the chance.\n", "Honey, can you marry me, I'll marry you!\n", "Don't know love you count is a close reason?"] '''

注意使用数据时换行符号的影响。

读取所有行也可以使用 ist(f) 方式。

file = open("guo_ke.txt", "r") print(list(file))

文件对象支持以行为单位进行迭代操作。

file = open("guo_ke.txt", "r") print("-----------迭代方式输出文件内容---------") for f in file: print(f) file.close() 3.2 文本文件写操作

如果使用 "w" 模式进行写操作时,会丢失原来数据。如果不希望这样的事情 发生,可使用 "a" 模式对文写操作。

file = open("guo_ke_0.txt", "w") file.write("this is a test") # 添加新行 file.write("\n") file.write("who are you?") # 把列表中数据一次写入文件 lst = ["food\n", "fish\n", "cat\n"] file.write("\n") file.writelines(lst) file.close() 3.3 编码的问题

对文件同时做读写操作时,请务必保证编码的一致性。

如下面的代码就会出现 UnicodeDecodeError 异常。

file = open("guo_ke_1.txt", mode="w", encoding="utf-8") file.write("你好!果壳……") file.close() file_ = open("guo_ke_1.txt", mode="r", encoding="gbk") res = file_.read() print(res) ''' 输出结果 Traceback (most recent call last): File "D:/myc/filedmeo/乱码问题.py", line 6, in <module> res = file_.read() UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 16: illegal multibyte sequence ''' 3.4 二进制文本件操作

调用 open( ) 函数时使用 mode='rb' 返回的是 BinaryIO 对象。此对象提供了对二进制文件的读写,对二进制文件的读写操作和文本的没有什么太多区别。

文本文件与二进制文本的操作使用一个参数就能灵活切换。

class BinaryIO(IO[bytes]): @abstractmethod def write(self, s: Union[bytes, bytearray]) -> int: pass 4. 总结

open( ) 函数是一个神奇的存在。无论是对文本文件还是二进进制文件,无论是读还是写,它都能工作的很好。不得不佩服 python 设计者的简洁设计理念。

像通过文件描述符打开文件,使用 opener 参数自定义底层实现,都可称得上神来之笔。

另使用文件后一定要关闭,除了可以直接调用 close( ) 方法外,还可能使用 with 语句,此语法结构能自动调用 close().

with open("guo_ke.txt") as f: pass

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfysf.html