cal rom like 全部 app col ssh conf
- f = open(' / Users / michael / test.txt', 'r')
- 如果文件不存在,
- open()
- 函数就会抛出一个
- IOError
- 的错误,并且给出错误码和详细的信息告诉你文件不存在.
如果文件打开成功,接下来,调用
方法可以一次读取文件的全部内容,Python 把内容读到内存,用一个
- read()
对象表示:
- str
- >>> f.read()'Hello,
- world ! '
最后一步是调用
方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:
- close()
- >>> f.close()
- with open('/path/to/file', 'r') as f:
- print(f.read())
- 调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。
- for line in f.readlines():
- print(line.strip()) # 把末尾的'\n'删掉
- StringIO
- 就是在内存中创建的file-like Object,常用作临时缓冲。
前面讲的默认都是读取文本文件,并且是 UTF-8 编码的文本文件。要读取二进制文件,比如图片、视频等等,用
模式打开文件即可:
- 'rb'
- >>> f = open('/Users/michael/test.jpg', 'rb')
- >>> f.read()
- b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节
要读取非 UTF-8 编码的文本文件,需要给
函数传入
- open()
参数,例如,读取 GBK 编码的文件:
- encoding
- >>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')
- >>> f.read()
- '测试'
遇到有些编码不规范的文件,你可能会遇到
,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,
- UnicodeDecodeError
函数还接收一个
- open()
参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:
- errors
- >>> f = open(' / Users / michael / gbk.txt', 'r', encoding = 'gbk', errors = 'ignore')
- 写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件.
操作文件和目录的函数一部分放在
模块中,一部分放在
- os
模块中,这一点要注意一下。查看、创建和删除目录可以这么调用:
- os.path
- # 查看当前目录的绝对路径:
- >>> os.path.abspath('.')
- '/Users/michael'
- # 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来:
- >>> os.path.join('/Users/michael', 'testdir')
- '/Users/michael/testdir'
- # 然后创建一个目录:
- >>> os.mkdir('/Users/michael/testdir')
- # 删掉一个目录:
- >>> os.rmdir('/Users/michael/testdir')
最后看看如何利用 Python 的特性来过滤文件。比如我们要列出当前目录下的所有目录,只需要一行代码:
- >>> [x
- for x in os.listdir('.') if os.path.isdir(x)]['.lein', '.local', '.m2', '.npm', '.ssh', '.Trash', '.vim', 'Applications', 'Desktop', ...]
要列出所有的
文件,也只需一行代码:
- .py
- >>> [x
- for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1] == '.py']['apis.py', 'config.py', 'models.py', 'pymonitor.py', 'test_db.py', 'urls.py', 'wsgiapp.py']
Python 学习 ---IO 编程
来源: http://www.bubuko.com/infodetail-2279944.html