文档的读写(r、rb)
读写文件都是使用io模块的open()函数,传入文件路径和标识符,由于在WINDOWS路径分隔符是’’,与python的转义符一致,传入路径的时候需要使用r’'强制为字符串。
读文档(r):
#把文本文档读取到内存中,用字符串对象表示,当文件不存在时,将报错
>>> f = open('/Users/易小白/test.txt', 'r',encoding='utf-8')
#关闭文档,读写文档后一定要关闭文档
>>>f.close()
'r’默认encoding=‘utf-8’,所以上面的代码中可以不输入encoding.
读取二进制文档(rb):
主要用于读取二进制编码的文件,如图片、视频等等
#将二进制的文档读取到内存中,用字符串对象表示
>>> f = open('/Users/michael/test.txt', 'rb')
#这里就不需要编码了,因为rb代表着读取二进制编码的文件
>>>f.close()#同样读取后要关闭
写文件(w、wb):
#写入一个test.txt文档,同样可以指定编码格式
>>> f = open('/Users/易小白/test.txt', 'w',encoding='utf-8')
#在f文件中,写入内容
>>> f.write('Hello, world!')
#关闭文档
>>> f.close()
同样,可以用’wb’写入二进制文档.
为了避免出现忘记关闭文件,导致内存溢出的情况,python提供了一个可以读\写完文件自动关闭的函数with open(),用法跟open一样,只不过在open前面加了一个with。
在内存中读\写字符串(StringIO)
很多时候,我们不需要将字符串写入文档中,只需要暂存,这是我们就可以使用stringIO()函数,将字符暂存在内存中,当需要读取我们暂存的字符串时,就可以使用getvalue方法读取内存中的字符串:
>>> from io import StringIO
>>> f = StringIO('Hello!\nHi!\nGoodbye!')
>>> while True:
s = f.readline()
if s == '':
break
print(s.strip())#python每执行一次print默认打印一个换行,所以我们需要将f中的\n跳过打印
#运行结果:
Hello!
Hi!
Goodbye!
问题来了,我们可以直接定义一个变量,存入我们想要的数据就可以了,为啥还用这么复杂的去做。原因在于,这样做不用分配内存,用完就释放了,可以减少程序的内存占用率。
在内存中读\写编码数据(BytesIO)
写入的是编码,而不是str:
>>> from io import BytesIO
>>> f = BytesIO()
>>> f.write('中文'.encode('utf-8'))
6
>>> print(f.getvalue())
b'\xe4\xb8\xad\xe6\x96\x87'