• 25. 读写文件


    1、读文件

    1. 以读文件的模式打开一个文件对象,使用python内置的open()函数
    >>> f = open('/Users/michael/test.txt', 'r')
    
    1. 如果文件不存在,open()函数就会抛出一个IOError的错误,并给出错误码和详细的信息
    >>> f=open('/Users/michael/notfound.txt', 'r')
    Traceback (most recent call last):
    	File "<stdin>", line 1, in <module>
    FileNotFoundError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'
    
    1. 如果文件打开成功,调用read()方法一次读取文件的全部内容
    >>> f.read()
    'Hello, world!'
    
    1. 最后调用close()方法关闭文件。
    >>> f.close()
    
    1. 由于文件读写时都可能产生IOError,一旦出错,f.close()就不会调用。所以,为了保证无论文件是否出错都能正确关闭文件,我们使用try ... finally来实现:
    try:
    	f = open('/path/to/file', 'r' )
    	print(f.read())
    finally:
        if f:
            f.close()
    

    但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

    with open('/path/to/file', 'r') as f:
    	print(f.read())
    

    这和前面的try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。

    1. 如果文件很小,read()一次性读取方便,则反复调用read(size)保险,如果时配置文件,调用readlines()最方便:
    for line in f.readlines():
    	print(line.strip()) # 把末尾的'
    '删掉
    

    字符编码

    ​ 要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数;

    例如,读取GBK编码的文件:

    >>> 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')
    

    2、写文件

    ​ 写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符‘w'或者‘wb’表示写文本文件或写二进制文件:

    >>> f = open('/Users/michael/test.txt', 'w')
    >>> f.write('Hello, world!')
    >>> f.close()
    

    ​ 务必调用f.close()来关闭文件,当写入文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存中,空闲时再慢慢写入。

    ​ 忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险:

    with open('/Users/michael/test.txt', 'w') as f:
    	f.write('Hello, world!')
    
  • 相关阅读:
    jQuery基础
    前端武器库之DOM练习
    前端逼死强迫症之DOM
    前端武器库系列之html后台管理页面布局
    前端逼死强迫症系列之javascript续集
    初识elasticsearch_2(查询和整合springboot)
    初识elasticsearch_1(基本概念和基本操作)
    springboot整合redis(注解形式)
    springsecurity实战
    浅谈JavaSript中的this
  • 原文地址:https://www.cnblogs.com/BigMario/p/13577894.html
Copyright © 2020-2023  润新知