Day11 - 文件和异常


日期: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的数据类型可以找到对应关系

JSONPython
objectdict
arraylist
stringstr
number (int / real)int / float
true / falseTrue / False
nullNone
PythonJSON
dictobject
list, tuplearray
strstring
int, float, int- & float-derived Enumsnumber
True / Falsetrue / false
Nonenull

使用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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值