Python文件操作及 json

Python文件操作及 json

一、文件的介绍

计算机的⽂件,就是存储在某种⻓期储存设备上的⼀段数据作⽤:将数据⻓期保存下来,在需要的时候使⽤

  • 计算机只认识 二进制(0,1)

  • 文件中存储的数据都是以二进制(0,1)

    可以根据⽂件中的⼆进制内容,能否使⽤记事本软件将其转换为⽂字,将⽂件分为两种:⽂本⽂件和⼆进制文件

  • 文本文件

    • 能够使⽤记事本软件打开(能够使⽤记事本转换为⽂字)
    • txt, md, py, html, css, js, json
  • 二进制文件

    • 不能使用记事本软件打开的
    • exe, mp3, mp4, jpg, png

我们操作的基本都是文本文件

二、文件操作

文件操作的步骤:

1、打开文件
2、度或者写文件
3、关闭文件

1、打开文件

打开⽂件:将⽂件从磁盘(硬盘)中读取到内存中

# 语法:
open(file, mode='r', encoding=None)
	> 参数file: 是要打开的⽂件,类型是字符串,文件的路径可以是相对路径,也可以是绝对路径(带盘符的路径,也就是说根目录),建议使用相对路径(相对于当前代码⽂件所在的路径, ./ ../)
	> 参数mode:默认参数(缺省参数),表示打开文件的方式
      > r: read 只读打开
      > w: write 只写打开
      > a:append 追加打开, 在文件的末尾写入内容
    > 参数 encoding :编码方式,(⽂字和⼆进制如何进⾏转换的)
      > gbk: 将⼀个汉字转换为 2 个字节二进制
      > utf-8: 常用,将⼀个汉字转换为 3 个字节的二进制
    > 返回值:饭后的是文件对象,后续对文件的操作,都需要这个对象

2、读或者写文件

写文件

向⽂件中写⼊指定的内容.

前提:⽂件的打开⽅式是w或者a

文件对象.write( '写入文件的内容')
# 返回值:写入文件的字符数,一般不关注

# 注意w方式打开文件:
1.文件不存在,会直接创建文件
2.文件存在,会覆盖原文件(将原文件中的内容清空)
# 打开文件
f = open('a.txt','w',encoding='utf-8')
# 写文件
f.write('不要焦虑\n')
f.write('平复心情')
# 关闭文件
f.close()

读文件

将⽂件中的内容读取出来
前提:⽂件的打开⽅式需要是 r

文件对象.read(n)
# 参数 n 表示读取多少个字符,一般不写,表示读取全部内容
# 返回值:读取到的文件内容,类型 字符串
# 打开文件
f = open('a.txt','r',encoding='utf-8')
# 读文件
buf = f.read()
print(buf)
# 关闭文件
f.close()

3、关闭文件

关闭⽂件:将⽂件占⽤的资源进⾏清理,同时会保存⽂件,⽂件关闭之后,这个⽂件对象就不能使⽤了

文件对象.close()

4、使用 with open 打开文件

好处就是,最后自行关闭文件,不用手动写 文件对象.close!!

with open('a.txt', encoding='utf-8') as 变量: # mode 默认是 'r'
    # 在缩进中去读取或者写⼊⽂件
    
# 在缩进中去读取或者写⼊⽂件,出缩进之后,文件会自动关闭
with open('a.txt','a',encoding='utf-8') as f:
    f.write('good good study')

# a方式打开文件,文件不存在会创建文件,文件存在,在文件的末尾写入内容

5、按行读取文件内容

按⾏读取⽂件:⼀次读取⼀⾏内容

文件对象.read()
# with open('b.txt',encoding='utf-8') as f:
#     buf = f.readline()
#     print(buf)
#     print(f.readline())



# with open('b.txt',encoding='utf-8') as f:
#     for i in f:
#         print(i,end='')

# read()和readline()读到文件末尾,返回一个空字符串,即长度为0


with open('b.txt',encoding='utf-8') as f:
    while True:
        buf = f.readline()
        if len(buf) == 0:
            break
        else:
            print(buf, end= '')

三、json文件的处理

json⽂件也是⼀个⽂本⽂件,就可以直接使⽤read()和write()⽅法去操作⽂件,只是使⽤这两个⽅法,不⽅便,所以对json⽂件有⾃⼰独特的读取和写⼊的⽅法

常⽤在做测试的时候,将测试数据定义为json⽂件格式,使⽤代码读取json⽂件,即读取测试数据,进⾏传参(参数化)

3.1 json的介绍

json基于⽂本,独⽴于语⾔的轻量级的数据交换格式

  • 基于文本,是一个文本文件,不能包含图⽚,⾳视频等
  • 独立于语言,不是某个语言特有的,每种编程语⾔都可以使⽤的
  • 轻量级,相同的数据,和其他格式相比,占用的格式比较小
  • 数据交换格式,后端程序员,给前端的数据(html,json,xml)

3.2 json文件的语法

1、json 文件的后缀是 .json

2、json 中的主要数据类型为 对象({} 类似于Python 的字典)和 数组([ ],类似python 中的列表),对象和数组可以互相嵌套

3、⼀个json⽂件是⼀个对象或者数组(即json⽂件的最外层要么是⼀个{},要么是⼀个数组[])

4、json 中的对象是由 键值对 组成的,每个数据之间使⽤ 逗号隔开,但是最后⼀个数据后边不要写逗号

5、json 中的字符串必须是双引号

6、json中的其他数字类型

数字类型---->intfloat

字符串string—>str

布尔类型true,false----->True,False(python中是大写首字母)

空类型 null ----->None

3.3json文件的书写

我叫⼩明,我今年18岁,性别男,爱好听歌,游戏,购物,吃饭,睡觉,打豆豆。我的居住地址为国家中国,城市上海

{
    
    
  "name": "小明",
  "age": 18,
  "isMen": true,
  "like": [
    "听歌",
    "游戏",
    "购物",
    "打豆豆"
  ],
  "address": {
    
    
    "country": "中国",
    "city": "上海"
  }
}

3.4 读取json文件

1、导包 import json

2、读打开文件

3、读文件

json.load(文件对象)

返回的是 字典 (文件中的对象)或者列表 (文件中的数组)


# 1.导包
import json

# 2、读打开文件
with open('Dome.json', encoding='utf-8') as f:
    # 3、读取文件
    result = json.load(f)
    print(type(result))  # <class 'dict'>
    print(result.get('name'))
    print(result.get('age'))
    print(result.get('address').get('city'))

练习:

我叫⼩明,我今年18岁,性别男,爱好听歌,游戏,吃饭,睡觉,打⾖⾖,我的居住地址为国家中国,城市上海.我叫⼩红,我今年17岁,性别⼥,爱好听歌,学习,购物我的居住地址为国家中国,城市北京.

json文件:

[
  {
    
    
    "name": "小明",
    "age": 18,
    "isMan": true,
    "like": [
      "听歌",
      "游戏",
      "购物",
      "打豆豆"
    ],
    "address": {
    
    
      "country": "中国",
      "city": "上海"
    }
  },

  {
    
    
  "name": "小红",
    "age": 18,
    "isMan": false,
    "like": [
      "听歌",
      "学习",
      "购物"
    ],
    "address": {
    
    
      "country": "中国",
      "city": "北京"
    }
  }
]

代码文件:

# 1、导包
import json
# 2、读打开文件
with open("infor2.json",encoding='utf-8') as f:
    # 3、读取文件
    infor_result = json.load(f)
    for infor in infor_result:
        print(infor.get('name'),infor.get("age"),infor.get("address").get("city"))

image-20220221202846236

练习2:

某⽹站的测试数据如下data.json,需求,提取json⽂件中的⽤户名,密码和预期结果,组成如下格式:(),(),()

[
  {
    
    
    "desc": "正确的用户名密码",
    "username": "admin",
    "password": "123456",
    "expect": "登录成功"
  },
  {
    
    
    "desc": "错误的用户名",
    "username": "root",
    "password": "123456",
    "expect": "登录失败"
  },
  {
    
    
    "desc": "错误的密码",
    "username": "admin",
    "password": "123123",
    "expect": "登录失败"
  }
]
def read_data():
    new_list = []
    with open("infor3.json",encoding='utf-8') as f:
        data = json.load(f)
        for i in data:
            new_list.append(i.get('username'),i.get('password'),i.get('expect'))

    # print(new_list)
    return new_list

image-20220221203301519


简单的介绍了下python中文本文件的操作和json文本,json的文本格式重要,要掌握,这篇帖子是为后面自动化测试做铺垫的。

猜你喜欢

转载自blog.csdn.net/qq_54219272/article/details/123236526