Python文件操作

1. 文件

文件的介绍

文件操作: 使用代码来读写文件

  1. 一般在python里面跑出来的数据, 是不能保存的, 想要进行永久保存, 此时就需要使用到文件

  2. 在自动化测试里面, 测试数是在文件中保存的, 从文件中读取测试数据, 进行自动化代码的执行

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

  1. 计算机只认识 二进制数据(0和1)

  2. 所有的文件在计算机中的存储形式都是二进制, 打开文件看见的文字不是二进制, 因为打开文件的软件会自动把二进制转化为文字

二进制的分类(是否能够使用文本软件(记事本)打开文件): 文本文件, 二进制文件

文本文件

  1. 可以使用记事本软件打开

  2. 类型: txt.py.dm,json..

二进制文件

  1. 不能使用记事本软件打开

  2. 类型: 音频文件(mp3), 视频文件(mp4),图片(png,jpg,gif,exe)

文件的操作步骤

步骤

  1. 打开文件

  2. 读写文件

  3. 关闭文件

1> 打开文件 open()

open(file,mode='r',encoding=None) # 把硬盘中的文件加载到内存中

  • file: 表示要操作的文件的名字, 可以使用相对路径和绝对路径

  • 绝对路径: 从根目录开始书写的路径 C:/ D:/

  • 相对路径: 从当前路径开始书写的路径 ./ ../

  • mode: 打开文件的方式

- r: 只读打开 read, 如果文件不存在, 就会报错

- w: 只写打开 write, 如果文件存在, 会覆盖原文件

- a: 追加打开 append, 在文件的末尾写入新的内容

-encoding: 编码格式, 指 二进制数据 和 汉字 转换的规则

- utf-8: 把一个汉字转换为 3 个字节的二进制

- gbk: 把一个汉字转换为 2 个字节的二进制

返回值: 文件对象. 后续对文件的操作, 都需要这个文件对象

2> 关闭文件 close()

文件对象.close() # 关闭文件, 如果是写文件, 会自动保存, 即将内存中的数据同步到硬盘中

3> 读文件 read()

变量 = 文件对象.read()

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

代码:

python 复制代码
f = open('a.txt', mode='r', encoding='utf-8')
print(f.read())
f.close()

4> 写文件 write()

文件对象.write('写入文件的内容')

参数: 写入文件的内容, 类型 字符串

返回值: 写入文件中字符数, 字符串的长度, 一般不关注

代码:

python 复制代码
#  1, 打开文件
f = open('a.txt', 'w', encoding='utf-8')
# 2, 写文件
# f.write('hello python!')
f.write('好好学习\n天天向上')
# 3, 关闭文件
f.close()

文件打开的另一种写法(推荐)

with open(file,mode,encoding) as 变量: # 变量就是文件对象

pass

使用这种写法打开文件, 会自动进行关闭, 不用手动书写关闭的代码

除了 with 的缩进之后, 文件会自动 close()

代码

python 复制代码
with open('a.txt', 'w', encoding='utf-8') as f:
    f.write("去武汉喽")

2. 文件操作

按行读取文件 readline()

文件对象.readline() # 一次读取一行的内容, 返回读取到的内容

read() 和 readline() # 如果读到文件末尾, 返回的 都是空字符串

代码

python 复制代码
with open('a.txt', encoding='utf-8') as f:
    buf = f.readline()
    print(buf)  # aaaaaa
    buf1 = f.readline()
    print(buf1)  # bbbbbb

读取大文件(一行一行读取所有的文件内容)

使用readline() 把文件一行一行遍历读出来

代码

python 复制代码
with open('a.txt', encoding='utf-8') as f:
    while True:
        buf = f.readline()
        if buf == "":
            break
        else:
            print(buf, end="")

with open('a.txt', encoding='utf-8') as f:
    while True:
        buf = f.readline()  # 文件读完, 返回的是空字符串, 空字符串是 False. 非空是 True
        if buf:
            print(buf, end='')
        else:
            break

打开文件的方式

r w a 称为是文本方式打开, 适用于 文本文件, 会对二进制进行编码转换

rb wb ab 称为是二进制方式打开, 可以打开文本文件和二进制文件, 但是 二进制文件只能使用二进制方式打开, 同时, 不能传递 encoding 参数

3. json文件

json 文件的概念以及介绍

概念

  1. json 文件也是文本文件, 可以使用 read 和 write 去进行操作

  2. json 的格式类似于 Python 中的字典和列表

  3. json 使用 read 和 write 会比较麻烦, 一般有专门的方法来操作 json 文件, 可以得到 Python 中的列表和数组

介绍

  1. json 文件, 是一种基于文本, 独立于语言的轻量级数据交换格式(yaml更加轻量级)

基于文本, 不包含图片视频...

轻量级,相同的数据量, json 占用的文件大小比较小

数据交换格式: 是 前端页面 和 后端服务器 交换数据使用的格式

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

json 的语法

  1. json 中的数据类型对应Python 中的数据类型

对象 {} ---> Python 字典 dict{}

数组 [] ----> Python 列表 list[]

字符串 必须使用双引号 ----> str

数字类型 ----> int , float

bool 类型(true, false) ---> True False

空值 null ----> None

  1. json 文件, 是一个对象或者数组, 对象和数组可以相互嵌套

  2. json 中的对象, 是由键值对组成的, 键必须是字符串类型

  3. json 中的数据直接使用逗号隔开, 最后一个数据后边不能加逗号

  4. json 文件的后缀是 .json

json 文件的定义

例子:

我叫⼩明,我今年 18 岁,性别男, 学校 空, 爱好 听歌,吃饭,打⾖⾖, 我的居住地址为 国家 中国, 城市 ⼴州.

写出来的josn文件

{

"name": "小明",

"age": 18,

"sex": "男",

"school": null,

"hobby": ["听歌","吃饭","打豆豆"],

"address": {

"country": "china",

"city": "广州"

}

}

读取json 文件

  1. 可以直接使用 read 去读, 但是想要取到数据很麻烦, 我们要转换为 python的字典和列表的形式

  2. 使用 专门的方法去读

1> 导包 import json

2> json.load(文件对象) --> 这样得到的是列表/字典

代码

python 复制代码
with open('t1.json', mode='r', encoding='utf-8') as f:
    # print(type(f.read()))
    buf = json.load(f)
    print(type(buf))
    # 姓名
    print(buf.get('name'))
    # 爱好
    print(buf.get('hobby')[0])
    # 城市
    print(buf.get('address').get('city'))

练习

我叫⼩明,我今年 18 岁,性别男, 爱好 听歌, 吃饭,打⾖⾖,我的居住地址为 国家中国, 城市⼴州. ---> 对象

我叫⼩红,我今年 17 岁,性别⼥, 爱好 听歌, 学习,购物我的居住地址为 国家 中国, 城市北京. ---> 对象

获取 每个⼈的姓名, 年龄 性别, 城市

{ "name": "小明", "age": 18, "sex": "男", "school": null, "hobby": \["听歌","吃饭","打豆豆"\], "address": { "country": "china", "city": "广州" } }, { "name": "小红", "age": 17, "sex": "女", "school": null, "hobby": \["听歌","学习","打豆豆"\], "address": { "country": "china", "city": "北京" } }

代码

python 复制代码
with open('t1.json', mode='r', encoding='utf-8') as f:
    # print(type(f.read()))
    buf = json.load(f)
    print(type(buf))
    for i in buf:
        print(f"姓名:{i.get('name')},年龄:{i.get('age')},爱好:{i.get('hobby')[0]},城市:{i.get('address').get('city')}")

往json文件写入对象

  1. 将 Python 中的列表或者字典转化为 json 文件

  2. 导包使用 import json

  3. 使用 json.dump(Python中数据, 文件对象)

代码

ensure_ascii=False 确保编码, 显示成中文

indent = 2 显示的格式缩进

python 复制代码
info = [{'name': '⼩明', 'age': 18}, {"name": "小黑", "age": 78}]
with open('info3.json', 'w', encoding='utf-8') as f:
    # json.dump(info, f) #
    # json.dump(info, f, ensure_ascii=False) # 直接显示中⽂
    json.dump(info, f, ensure_ascii=False, indent=2)
    # 直接显示中⽂
相关推荐
xqlily2 小时前
Go语言:高效简洁的现代编程语言
开发语言·后端·golang
数据知道2 小时前
Go语言:数据压缩与解压详解
服务器·开发语言·网络·后端·golang·go语言
席万里2 小时前
什么是GO语言里面的GMP调度模型?
开发语言·后端·golang
hqwest3 小时前
QT肝8天09--用户列表
开发语言·c++·qt·上位机·qt开发
weixin_525936333 小时前
金融大数据处理与分析
hadoop·python·hdfs·金融·数据分析·spark·matplotlib
Zwb2997923 小时前
Day 30 - 错误、异常与 JSON 数据 - Python学习笔记
笔记·python·学习·json
山,离天三尺三4 小时前
基于LINUX平台使用C语言实现MQTT协议连接华为云平台(IOT)(网络编程)
linux·c语言·开发语言·网络·物联网·算法·华为云
码界筑梦坊4 小时前
206-基于深度学习的胸部CT肺癌诊断项目的设计与实现
人工智能·python·深度学习·flask·毕业设计
吾疾唯君医4 小时前
记录GoLang创建文件并写入文件的中文乱码错误!
开发语言·后端·golang