加油加油 记录下每天的小进步

文件操作

1, 文件: 可以存储在长期存储设备(硬盘, U盘) 上的一段数据即为文件

2, 计算机只认识 二进制(0 和 1), 计算机也只能存储二进制数据(在计算机存储的数据都是以二进制的形式 存储的)

3, 我们使用软件打开 看到的不是 0 和 1, 原因是 打开文件的软件会自动的将二进制数据进行转换

4, 根据能否使用 文本软件(记事本) 打开文件,将文件分为两类

  • 文本文件(能使用记事本打开), 比如: .txt, .py, .md(markdown)
  • 二进制文件(不能使用记事本打开的),比如: 音频(mp3) 视频(mp4, avi, rmvb …), 图片(jpg, png, gif ) 等

文件操作
步骤
1, 打开文件
2, 读/写文件
3, 关闭文件(保存)

  1. 打开文件
    文件 是在 硬盘 中存储的, 打开文件,可以理解为 将硬盘中文件 加载到内存中
    在 Python 中打开文件 使用的方法是 open() 函数
    open(file, mode=‘r’, encoding=None) # 打开文件
  • file: 要打开的文件, 类型 str, 可以使用相对路径, 也可以使用绝对路径
    • 相对路径, 从当前代码所在的目录开始书写的路径(./ 当前目录 …/ 上一级目录)
    • 绝对路径, 从盘符根目录(C: D: E:)开始书写的路径
  • mode: 打开文件的方式
    • ‘r’,read 只读打开, 文件只能读取,不能写入, 文件不存在, 会报错
    • ‘w’,write 只写打开, 文件只能写入,不能读取, 文件不存在,会创建文件,文件存在,会覆盖原文件
    • ‘a’,append 追加打开, 只能在文件的末尾写入内容,文件不存在,会创建文件
  • encoding, 编码方式. 简单理解 二进制 和汉字之间如何进行转换的
    • gbk, 将一个汉字 转换为 2 个字节的二进制
    • utf-8(使用最多), 将一个汉字转换为 3 个字节的二进制
      (byte 字节: 计算机中基本的存储单位, 1KB = 1024 Byte)
  • 返回值: 返回一个 文件对象, 后续对文件的操作,都需要这个文件对象

变量 = open(文件名, 打开方式, encoding=‘utf-8’)

变量 就是 文件对象

  1. 读写文件
    读文件
    变量 = 文件对象.read() # 将文件中内容全部读取

返回值就是读取到的文件内容,类型是 字符串

with open(‘a.txt’, ‘r’, encoding=‘utf-8’) as f:
result = f.read()
print(result)
写文件
文件对象.write(‘写入的内容’) # 写入的内容需要是一个字符串

# 1. 打开文件

f = open(‘a.txt’, ‘w’, encoding=‘utf-8’)

# 2. 写文件

f.write(‘好好学习\n’)

f.write(‘天天向上’)

# 3. 关闭文件

f.close()

with open(‘a.txt’, ‘w’, encoding=‘utf-8’) as f:
f.write(‘good good study’)

追加文件
with open(‘a.txt’, ‘a’, encoding=‘utf-8’) as f:
f.write(‘\nday day up’)
3. 关闭文件
关闭文件的同时,会保存文件, 同时会清理内存中的资源
文件对象.close()

打开文件的推荐写法
with open(文件, 打开方式, encoding=‘utf-8’) as 变量: # 变量,就是文件对象
书写对文件的操作

好处,不用书写关闭文件的代码, 会自动关闭文件

关闭时机: with 缩进中的代码 执行完成,会关闭(出了 with 的缩进后会关闭)

按行读取文件
一次读取一行内容,文件指针(光标)会移动到这行的末尾
文件对象.readline()

read() 和 readline() 读到文件末尾,返回空字符串 “”
需求

模拟读取大文件:
文件内容有很多行,每次读取一行,读完位置
代码

with open(‘a.txt’, encoding=‘utf-8’) as f:
for i in f: # 文件对象 是可以直接遍历的, i 就是一行的内容
print(i, end=‘’)

with open(‘a.txt’, encoding=‘utf-8’) as f:
while True:
result = f.readline()
# 判断 result 的结果是否是空字符串, 如果是空字符串表示读到文件末尾,直接退出循环
if result == ‘’:
break

    print(result, end='')

with open(‘a.txt’, encoding=‘utf-8’) as f:
while True:
result = f.readline()
# 判断 result 的结果是否是空字符串, 如果是空字符串表示读到文件末尾,直接退出循环
# 空字符串是 False, 非空字符串是 True
# if result == ‘’:
# if not result != ‘’: # result != ‘’ 表示读到内容, 没有读到文件末尾, 加上 not 就是取反
if not result: # result(1. 有内容为 True, 加上 not变为 False 2, 没有内容即空字符串, 是 False, 加上 not,变为 True)
break

    print(result, end='')

Json 操作(重点)

1, json 文件 也是文本文件, 那么可以使用 read 和 write 函数 来操作,只是不方便而已

2, json 文件的格式比较特殊,像 Python 中字典和列表.

3, json 一种基于文本,独立于语言的轻量 级数据交换格式。

  • 基于文本的, 文本文件,不包含图片,音视频
  • 独立于语言, 是指不是某种语言特有的,是所有编程语言都可以使用的
  • 轻量级, 定义相同的数据量, json 占用的文件比较小
  • 数据交换格式, 前端和后端 的数据交互的格式

4, 在自动化测试中经常用来存放 测试数据,文件后缀名为: .json

json 语法

1, json 中的数据类型

对象 {}   ---> Python 字典
数组 []   ---> Python 列表
字符串 "",必须使用双引号
数字类型    ---->python int, float
布尔类型 true, false ---> python True ,False
空 null      ----> python  None

2, json 文件中, 是一个对象{}或者数组[], 对象和数字可以相互嵌套

3, json 对象 是由键值对组成的, 键 必须是 字符串

4, json 中数据与数据之间使用逗号隔开, 最后一个数据后边不能写逗号

Json 文件读取

1, json 文件是一个文本文件,可以使用 read 读取, 得到的数据是 字符串类型,提取数据很麻烦

2. 所以 存在一个专门读取 json 文件的方法, 可以直接得到列表或者字典(根据 json 文件来决定的)

步骤:

  1. 导包 import json
  2. 读打开文件
  3. 使用 json.load(文件对象) 来读取 json 文件 --> 列表或者字典

json 的写入[了解]

是指将 Python 中的字典或者列表 直接写入 json 文件

步骤:

1, 导包 import json

2, 只写’w’打开文件

3, 使用 json.dump(Python 中的列表或者字典, 文件对象) 保存文件

import  json
info={
    "name": "张三",
    "age": 25,
    "gender": "男",
    "hobby": ["看书", "旅游", "游泳"],
    "is_student": False,
    "address": {
        "city": "北京",
        "street": "朝阳区幸福大街100号",
        "postal_code": "100000"
    }
}
with open('info.json', 'w', encoding='utf-8') as f:
    json.dump(info, f, ensure_ascii=False,indent=2,)  # ensure_ascii=False 用来解决中文写入时的乱码问题

with open('info.json', 'r', encoding='utf-8') as f:
    data = json.load(f)
    print(data)
---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

Cell In[1], line 2
      1 with open('info.json', 'r', encoding='utf-8') as f:
----> 2     data = json.load(f)
      3     print(data)


NameError: name 'json' is not defined

PYTHON的异常处理

异常的传递[理解]

异常传递: 在函数的嵌套调用过程中, 如果内部函数发生了异常,没有捕获,会将这个异常传递到外层函数(函数调用的地方), …

一直向外传递, 直到被捕获,或者最终报错

不需要我们自己代码实现, Python 底层已经实现的,我们只需要知道 异常会向外传递.
抛出异常
1, 抛出异常: 代码程序停止执行,并提示错误信息,就是抛出异常.
简单说: 程序代码之所以会停止执行,会报错, 是因为代码执行 遇到了抛出异常的代码

2, Python 中抛出异常 使用的关键字 是 raise,(简单理解,程序代码执行 遇到 raise , 代码就会停止,报错) (raise Exception(‘错误信息’))

3, 使用场景: 将来 我们自己书写代码模块,让别人使用, 为了规范使用者使用(参数是否满足要求等),只有满足我们的要求, 代码才能继续向下执行,如果不满足, 就抛出异常,终止代码的执行

写代码功能模块的人 抛出异常, 调用代码的人 捕获异常

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐