文件操作

一、文件引入

  1、自动化测试时,测试数据保存到文件中。从文件中读取测试数据,进行自动化代码的执行

  

二、文件操作

  文件:可以存储在长期存储设备上的一段数据即为文件。(计算机只认识二进制 0 和 1 )

  文件类型(根据能否使用文本软件(记事本)打开文件):

    文本文件:可以使用记事本打开(如:txt、py、md、JSON)

    二进制文件:(不可以使用记事本打开(如:mp3、mp4、jpg、png。。。))

 

三、文件操作步骤(打开和关闭文件)

  1、打开文件(返回值:文件对象,后续对文件的操作,都需要这个文件对象。将硬盘中的文件,加载到内存中)

open(file, mode='r', encoding=None)
#file 表示操作文件的名字,可以使用相对路径 和 绝对路径
#绝对路径:从根目录开始书写的路径:c:/   D:/
#相对路径:从当前目录开始的路径:./    ../

#mode 表示打开文件的方式(文本方式打开(r / w /a ),适用于文本文件,会对二进制进行转码)
#  r :表示只读打开,如果文件不存在会报错
#  w:只写打开,如果文件存在,会覆盖源文件
#  a:追加打开,在文件末尾写入新的内容
# rb/wb/ab(二进制方式打开,可以打开文本文件和二进制文件。但二进制文件只能使用此方法,且此时不需要写入encoding)
#encoding 表示编码格式,指二进制 和 汉字 转换的规则 # utf
-8:将一个汉字转换为三个字节的二进制 # jbk:将一个汉字转换为两个字节二进制

  

  2、关闭文件

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

  3、读文件

    变量 = 文件对象 . read()   #返回值:返回读取到文件内容,类型为字符串

  4、写文件

    文件对象 . write()   #返回值:写入文件中的字符数,字符串长度。写入文件中的内容为二进制,字符串

写文件例子:

#1、打开文件
f = open("a.txt",mode = "w",encoding = "utf-8")
#写入文件
f.write("hello")
#关闭文件
f.close()

读文件例子:

#1、打开文件
with open("a.txt",mode = "r",encoding = "utf-8") as f:     #使用此种方法,会自动关闭,不用手动关闭书写
#读文件
    print(f.read())

#方式二
f = open("a.txt",mode = "r",encoding = "utf-8")
#读文件
r = f.read()
#关闭文件
f.close()

 

四、按行读取文件

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

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

with open("a.txt",encoding="utf-8") as f:
  #一行一行读
# buf = f.readline() #aaaaaaaaa 一次读取一行 # print(buf) # buf1 = f.readline() #bbbbbbbbb 接着上面的一行读 # print(buf1)

  #读取大文件
while True: buf2 = f.readline() if buf2 == "": break else: print(buf2,end="")

 

五、JSON文件(本质也是文本文件,可以使用 read 和 write 去进行操作)

  1、JSON文件比较特殊,比较像Python文件中的字典和列表

  2、定义:JSON是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式

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

  3、JSON数据必须为字符串类型,必须使用英文的双引号

    JSON数据类型:

      对象 {}:

      数组 []:

      字符串:必须使用双引号

      数字类型:int float

      布尔值:true / false 小写

      空值:null 

  4、JSON文件,是一个对象 或者 是一个数组。二者可以相互嵌套(由键值对组成,键必须为字符串类型,数据直接用逗号隔开,最后一个数据后边不能加逗号)

  5、JSON文件定义

  6、读取JSON文件

    可以使用 read ,但是取数据很麻烦。一般使用专门的方法(如下:json.load() )

import json
with open("info.json",encoding="utf-8") as f:
    buf = json.load(f)    #此时获取得到的是 列表 或者是 字典
    #直接使用列表或者字典的方法获取数据
    print(buf.get("name"))    #小明
    print(buf.get("adress").get("city"))   #广州
   print(buf.get("name")[1])

    当有两个对象时(以列表套字典格式)

[
  {
    "name": "小明",
    "age": 18,
    "isMan": true,
    "like": [
      "听歌",
      "吃饭",
      "打豆豆"
    ],
    "adress": {
      "country": "中国",
      "city": "广州"
    }
  },
  {
    "name": "小明",
    "age": 18,
    "isMan": true,
    "like": [
      "听歌",
      "吃饭",
      "打豆豆"
    ],
    "adress": {
      "country": "中国",
      "city": "北京"
    }
  }
]
import json
with open("info1.json",encoding="utf-8") as f:
    buf = json.load(f)    #此时获取得到的是 列表 或者是 字典(这里需要和原数据对照看确定类型,列表是没有get方法的)
    #直接使用列表或者字典的方法获取数据
    for data in buf:
        # "男" if data.get("isMan") else "女"   此代码和下面if else执行效果一样
        if data.get("isMan"):
            sex = ""
        else:
            sex = ""
        print(data.get("name"))    #小明、小红
        print({sex},data.get("adress").get("city"))   #广州、北京

  

  7、JSON文件写入(了解)

    将Python中的列表或者字典,转化为JSON文件(json . dump())

import json
info = {"name":"小刚","age":18}
with open("info2.json","w",encoding="utf-8") as f: 
    json.dump(info,f,ensure_ascii=False,indent=2)    #ensure_ascii=False代表正常中文存储,indent代表缩进,数字代表几个空格

 

 

 

  

 

 

      

posted @ 2023-04-03 11:05  新入世界的小白  阅读(121)  评论(0编辑  收藏  举报