文件
基本概念
作用
记录数据,下次执行可直接使用
文件类型
每类信息可以一种或多种文件格式存在电脑中
扩展名可帮助应用程序识别文件格式
大体分为:文本文件和二进制文件
操作文件
日常操作文件
- 打开word,新建一个word文件
- 写入信息
- 保存文件
- 关闭word软件
Python操作文件
- 打开文件,或新建一个文件:open(文件名, 访问模式)
- 读/写数据
- 文件.write(“数据”) 一次性写入一个数据
- 文件.writelines([数据1, 数据2]) 一次性写入多个数据
- 文件.read(字符个数) 读取指定个数的字符
- 文件.read() 读取所有数据
- f.readlines() 一次性把每一行读取出来保存在列表中
- f.readline() 一行一行读取
- 如果文件过大,readlines一次性读取出来大致超过电脑的内存,建议使用readline
- 如果文件很小,建议使用readlines一次性读取
- 关闭文件:文件变量.close()
常用访问模式
- r 读取
- a 追加
- w 写入
- x 创建
关闭文件
文件变量.close()
数据写在文件中
语法
文件.write(“数据”) 一次性写入一个数据
文件.writelines([数据1, 数据2]) 一次性写入多个数据
注意
- f.write()
- f.writelines()
- w 默认覆盖原本内容
文件读取数据
语法
文件.read(字符个数) 读取指定个数的字符
文件.read() 读取所有数据
注意
- f.read() 可多次调用,每次调用会在原基础上向后读取
- r 表示要读取文件中的内容,但不可写入数据
- 若文件不存在,会报错
- open 打开模式默认是 r
一行一行从文件中读取数据
语法
列表 = 文件.readlines()
读取文件所有行,且把每行数据放在列表返回,列表元素是文件每行数据
字符串 = 文件.readline()
一次性读取一行文件中的数据
区别
- readlines 是一次性把每行都读取出来保存在列表中
- readline 是一行一行读取
注意
- 每调用依次 readline() 才会读取一行数据
任意文件复制
注意
- 所有文件都是二进制文件(包含文本文件)
- 二进制文件不需要指定编码,只有文本文件需要指定编码
文件操作
os模块提供了很多方法来处理文件和目录
文件处理
JSON语法
- 使用key:value形式描述
- 大括号表示对象
- 数据之间使用逗号隔开
- 中括号表示数组
JSON文件处理
本质是一个字符串
JSON是一种轻量级的数据交换格式
Python3可使用json模块解决JSON数据进行编解码
- json.loads():对数据进行解码,把JSON数据转为Python Object
- json.dumps():对数据进行编码,把Python Object转为JSON
注意:JSON文件不支持注释
YAML文件处理
使用空白符号缩进,和高级语言类似
配置文件后缀:.yml/.yaml
- 对象:键值对的集合,映射/字典
- 数组:一组按次序排列的值,序列/列表
- 纯量scalars:单个,不可再分的值
- 纯量是最基本,不可再分的值,包括:字符串、布尔值、证书、浮点数、Null时间、日期
YAML文件支持注释
扩展
ASCII码、Unicode
ASCII——维基百科
Unicode——维基百科
中文一般占用3个字节,也有占用4个字节
枚举类型Enum
规则
- 成员不能重复
- 成员值不可修改
注意
- DataType.TRAIN是枚举类型
- DataType.TRAIN.value才是存储的数据类型
from enum import Enum
class DataType(Enum):
TRAIN = 'train'
TEST = 'test'
# 获取值
DataType.TRAIN.value
异常
当 Python 检测到到一个错误时,解释器无法继续执行,会出现一些错误提示,即为异常(Exception)
捕获异常
使用 try… except 处理异常
语法
try:
# 可能出现异常的代码块
except:
# 处理异常
或
try:
# 可能出现异常的代码块
except(错误类型类名1, 错误类型类名2):
# 处理异常
例如
print('执行前')
try:
open('zzzz.txt')
print('执行中..')
except FileNotFoundError as e:
print(e)
print('执行后')
输出
异常类型
错误类型不用单独记录,最大的异常类型是 Exception
常见错误类型如图
图片地址来自:Built-in Exceptions --Python
获取异常的信息
最大的异常类型是 Exception,代码执行从上往下,先碰到能捕获异常的代码,就会进入相应的 except 捕获执行代码块中
try:
# 可能出现异常的代码块
except Exception as e:
# 处理异常
无论程序是否出现异常,都会执行 finally 代码块
例如文件打开后,在执行代码过程中,出现异常,导致文件没有关闭,可使用 finally 语句处理文件关闭
try:
# 可能出现异常的代码块
except Exception as e:
# 处理异常
finally:
# 无论是否捕获到异常 都会执行的代码块
自定义异常
抛出异常使用 raise
语法
raise 异常错误类型(异常输出信息)
例如:FoodError
class FoodError(Exception):
def __init__(self, msg):
self.msg = msg
pass
class Kitchen:
def __init__(self, name):
self.name = name
pass
def cookFood(self, food):
if food == 'bomb':
raise FoodError('Seriously!?')
else:
print('Good food')
pass
zzz_kitchen = Kitchen("zzz's kitchen")
food = input('Input a food: ')
try:
zzz_kitchen.cookFood(food)
except FoodError as e:
print(type(e).__name__, e)
pass
finally:
print('finally: 释放资源')
pass
输出