Day11 – 文件和异常

作者: paranoid 分类: Python 发布时间: 2021-01-28 23:38

日期:2021年1月28日

今天是学习Python的第十一天,今天的文件读写操作和C++差不多,拓展了JSON。

学习用的教材是GitHub上骆昊编写的《Python - 100天从新手到大师》


一、文件操作

Python中可以使用内置的open函数,指定文件名、操作模式、编码信息等来获得操作文件的对象,对文件进行读写操作。

操作模式 具体含义
r 读取(默认)
w 写入(会先截断之前的内容)
x 写入,如果文件已经存在会产生异常
a 追加,将内容写入到已有文件的末尾
b 二进制模式
t 文本模式(默认)
+ 更新(即可以度又可以写)

二、读写文本文件

使用open时,需要给定参数,分别为文件名、文件操作模式(如不指定默认为r)、通过encoding指定编码(如不指定默认为None,即系统默认编码)

读写操作:

def main():
    # 写操作
    f=open('abc.txt','w',encoding='utf-8') # w模式下如无文件会自动创建文件
    f.write("Hello,world!")
    f.close()
    # 读操作
    f=open('abc.txt','r',encoding='utf-8')
    print(f.read())
    f.close

if  __name__=='__main__':
    main()

💡 如果想以追加方式写入文件,使用a模式。如果不想写close函数,可以使用with关键字,它可以指定文件对象的上下文环境并离开时自动释放文件资源。其使用方法示例如下:

with open('abc.txt','r',encoding='utf-8') as f:
    print(f.read())

r模式下,如果open指定的文件不存在或者无法打开,会造成程序异常,这时候需要采用Python的异常机制来避免出现异常。

def main():
    try: # 异常机制程序标志
        # 运行中可能会异常的代码
        with open('abc.txt', 'r', encoding='utf-8') as f:
            print(f.read())
    # 找不到文件
    except FileNotFoundError:
        print('无法打开指定的文件!')
    # 指定了未知编码
    except LookupError:
        print('指定了未知的编码!')
    # 无法按指定编码解码
    except UnicodeDecodeError:
        print('读取文件时解码错误!')
    finally: # 异常机制结束后运行(总是运行)
        pass

if __name__ == '__main__':
    main()

Python的读写操作除了readwrite外,还支持逐句进行读写,关键字分别为readlinewriteline,和C++用法一样。

三、读写二进制文件

和txt是差不多的,二进制文件在操作模式参数多加一个b,下面是实现文件复制的案例:

def main():
    try:
        with open('a.png', 'rb') as f1:
            data = f1.read()
            print(type(data))  # <class 'bytes'>
        with open('b.png', 'wb') as f2:
            f2.write(data)
    except FileNotFoundError:
        print('指定的文件无法打开.')
    except IOError:
        print('读写文件时出现错误.')
    print('程序执行结束.')

if __name__ == '__main__':
    main()

四、读取JSON文件

JSON是JavaScript Object Notation的缩写,它使用JavaScript语言编写,被广泛的应用于跨平台跨语言的数据交换,因为JSON也是纯文本,任何系统任何编程语言处理纯文本都是没有问题的。

比如,常用的ss代理配置:

{
    "server":"0.0.0.0",
    "server_port":8388,
    "local_address":"127.0.0.1",
    "local_port":1080,
    "password":"password",
    "timeout":600,
    "method":"aes-256-cfb"
}

拓展:JSON就好比Python中的字典,JSON的数据类型和Python的数据类型可以找到对应关系

JSON Python
object dict
array list
string str
number (int / real) int / float
true / false True / False
null None
Python JSON
dict object
list, tuple array
str string
int, float, int- & float-derived Enums number
True / False true / false
None null

使用Python中的json模块就可以将字典或列表以JSON格式保存到文件中,代码如下所示

import json

def main():
    mydict = {
        'name': 'Paranoid',
        'email': 'administrator@svip886.cn',
        'qq': 297300226,
        'friends': ['张三', '李四'],
        'cars': [
            {'brand': 'BYD', 'max_speed': 180},
            {'brand': 'Audi', 'max_speed': 280},
            {'brand': 'Benz', 'max_speed': 320}
        ]
    }
    try:
        with open('data.json', 'w', encoding='utf-8') as fs:
            json.dump(mydict, fs)
    except IOError as e:
        print(e)
    print('保存数据完成!')

if __name__ == '__main__':
    main()

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

邮箱地址不会被公开。