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

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

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

示例代码如下:

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

输出结果:

ABC

很简单是吧?这里要注意一点,这里我们用的是斜杠(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 StringIOf=StringIO()f.write('quinn')f.write(' ')f.write('lee')print(f.getvalue())

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

(2)BytesIO

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

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

输出结果如下:

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

也可以初始化后读取,

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

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180405G17N7L00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券