Python具有基本的文本文件读写功能。Python的标准库提供有更丰富的读写功能。
文本文件的读写主要通过open()所构建的文件对象来实现。
创建文件对象
我们打开一个文件,并使用一个对象来表示该文件:
f = open(文件名,模式)
常用的模式有:
‘r‘:读
‘w‘:写
‘a‘:追加
‘r+‘ :r+w(可读可写,文件若不存在就报错 IOError)
‘w+‘ : w+r(可读可写,文件若不存在就创建)
‘a+‘ :a+r(可追加可写,文件若不存在就创建)
对应的,如果是二进制文件,就都加一个b就好啦:
‘rb‘ ‘wb‘ ‘ab‘ ‘rb+‘ ‘wb+‘ ‘ab+‘
比如:
>>>f = open(‘test.txt‘,‘r‘)
文件对象的方法
读取:
content = f.read(N) # 读取N bytes的数据
content = f.readline() # 读取一行
content = f.readlines() # 读取所有行,储存在列表中,每个元素是一行
写入:
f.write(‘I like apple‘) # 将‘I like apple‘写入文件,字符串作为参数
f.writelines([‘hello\n‘,‘python\n‘]) # 字符序列作为参数
关闭文件:
f.close()
上下文管理器
上下文管理器(context manager)用于规定某个对象的使用范围。一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存)。它的语法形式是with...as...
可以在不需要文件的时候,自动关闭文件。
with open(‘new.txt‘, ‘w‘) as f: f.write("Hello World!")print f.closed
上下文管理器有隶属于它的程序块,当隶属的程序块执行结束的时候,上下文管理器自动关闭了文件(可以通过f.closed来查询文件是否关闭)。我们相当于使用缩进规定了文件对象f的使用范围。
上面的上下文管理器基于f对象的__exit__()特殊方法。当我们使用上下文管理器的语法时,实际上要求Python在进入程序块之前调用对象的__enter__()方法,在结束程序块的时候调用__exit__()方法。对于文件对象f来说,它定义了__enter__()和__exit__()方法。在f的__exit__()方法中,有self.close()语句。所以在使用上下文管理器时,我们就不用明文关闭f文件了。
任何定义了__enter__()和__exit__()方法的对象都可以用于上下文管理器。文件对象f是内置对象,所以f自动带有这两个特殊方法,不需要自定义。
练习
比较两个文件中的内容,并把存在于 a.txt 不存在于 b.txt 的数据输出到 c.txt:
fa = open(‘a.txt‘,‘r‘)a = fa.readlines()fa.close() fb = open(‘b.txt‘,‘r‘)b = fb.readlines()fb.close() c = [i for i in a if i not in b]fc = open(‘c.txt‘,‘w+‘)fc.writelines(c)fc.close()
原文地址:https://www.cnblogs.com/yutb/p/10783069.html