先说一下,在命令行模式下怎么换文件目录。只需要输入“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'
希望有志同道合的小伙伴关注我的公众平台,欢迎您的批评指正,共同交流进步。
领取专属 10元无门槛券
私享最新 技术干货