24.python的文件(一)——读写和StringIO,BytesIO

先说一下,在命令行模式下怎么换文件目录。只需要输入“cd somefile”,就可以进入该目录的下一个文件。要是想返回的话,键入‘cd..’。

1)读,写文件
(1)读文本文件

示例代码如下:

f=open('/users/Administrator/Documents/GitHub/untitled/text.txt','r')
print(f.readlines())
f.close()

输出结果:

WTF
很简单是吧?这里要注意一点,这里我们用的是 斜杠(forward slash),而windows 文件目录通常是反斜杠(back slash)。

这里,我们调用了read()方法来读取文件中的内容,如果我们想按字符数量来读取文件,只需要read(size),定义size的大小即可。

如果想要读取一行的话,可以调用readline()来读取一行,若是readlines()则是读取所有内容,并返回一个列表。

接下来,我们关闭文件。如果不关闭文件的话,会太占用系统的内存。这里,我们用的是close()方法。但是当我们文件读取发生错误时,这个方法便不会调用。这里我们采用try.....finally....来解决这个问题。示例代码如下:

try:
    f=open('/users/Administrator/Documents/GitHub/untitled/text.txt','r')
    print(f.readlines())
finally:
    if f:
        f.close()

但是每次都这么调用太麻烦了。这里有另一种用法,with...as.....。这样就不用写close了。

with open('/users/Administrator/Documents/GitHub/untitled/text.txt','r') as f:
    print(f.readlines())

类似于open函数返回的这种对象都叫file-like object(类文件对象)。无需定义从类中继承,直接写read()方法就行。如网络流,字节流等。

(2)读其他格式文件

前面说的都是文本文件,而且是utf-8格式,要使打开图片视频啥的,只需将‘r’,改为‘rb’就可以了。

(3)编码文件

如果我们相对读取的文件编码,可以采用encoding关键字。今天在神经网络与深度学习这本书中看到,那里是对train_data进行编码为“latin1”。示例代码如下:

with open('/users/Administrator/Documents/GitHub/untitled/text.txt','r',encoding='latin1') as f:
    print(f.readlines())

有时候文件中可能掺杂着其他格式的字符,我们忽略就可以。如下:

with open('/users/Administrator/Documents/GitHub/untitled/text.txt','r',encoding='latin1',errors='ignore') as f:
    print(f.readlines())
(4)写文件

写文件是完全一样的,就是字符变成了‘w’和‘wb’。示例代码如下:

>>> f=open('/Users/Administrator/text.txt','wb')
>>> f.write('wtf')
>>> f.close()
2)StringIO()和BytesIO()
(1)StringIO

其实python不光可以从硬盘中读写数据,还可以对内存读写数据。我们可以用StringIO来操作,示例代码如下:

from io import StringIO
f=StringIO()
f.write('quinn')
f.write(' ')
f.write('lee')
print(f.getvalue())

这里,先付给一个对象f。然后对对象进行操作,写入后,再用getvalue()方法,进行读取。

(2)BytesIO

上面的只可以对字符串进行操作,这里我们也可以用BytesIO对二进制数据操作。示例代码如下:

# -*- coding: utf-8 -*-
#!/usr/bin/env python3
from io import BytesIO
f=BytesIO()
f.write('哈罗'.encode('utf-8'))
print(f.getvalue())

输出结果如下:

b'\xe5\x93\x88\xe7\xbd\x97'

也可以初始化后读取,

from io import BytesIO
f = BytesIO(b'\xe5\x93\x88\xe7\xbd\x97')
f.read()
b'\xe5\x93\x88\xe7\xbd\x97'

希望有志同道合的小伙伴关注我的公众平台,欢迎您的批评指正,共同交流进步。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值