python外部数据源文件处理

JSON

JSON是一个轻量级的数据交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象(接口测试时常有)
python json的官方文档:https://docs.python.org/3/library/json.html

JSON的读写

  • json.dumps
    • 是将dict类型转换为string
  • json.dump
    • 是将dict类型转换为json格式字符串,存入文件
  • json.loads
    • 基于string,是将json格式字符串string转换为dict
  • json.load
    • 反序列化,是将json格式字符串文件转化为dict
      (加了s是对于string的操作,不加s是对文件的操作)
import json
class PracticeJson:
    def __init__(self):
        self.data={"a":1,"b":2}
    def practice_dumps(self):   //#将dict转化为字符串
        print(type(self.data))     // #打印结果:<class 'dict'>
        print(json.dumps(self.data))         // #打印结果:{"a": 1, "b": 2}
        print(type(json.dumps(self.data)))    //#打印结果:<class 'str'>

    def practice_dump(self):  //#将dict转化为json文件
        with open("./demo.json","w") as fs:
            json.dump(self.data,fp=fs)

    def practice_loads(self): //#将json格式string转换为dict
        json_data = json.dumps(self.data)
        print(type(json_data)) // #打印结果:<class 'str'>
        print(json.loads(json_data))  //#打印结果:{'a': 1, 'b': 2}
        print(type(json.loads(json_data)))  //#打印结果:<class 'dict'>

    def practice_load(self):  //#将json格式字符串文件转化为dict
        print(json.load(open("demo.json")))  //#打印结果:{'a': 1, 'b': 2}

json.dumps常用参数

  • sort.keys:输出时字典是键值排序的,而不是随机的
  • indent:缩进,可以更好地看清结构
  • json需要字典的键是字符串,否则会抛出ValueError
    print(json.dumps(self.data, sort_keys=True,indent=4)) 
    打印结果:
    图片说明

    Excel

    直观的界面,出色的计算功能
    好用的第三方库集合:http://www.python-excel.org/
    openpyxl库:https://openpyxl.readthedocs.io/en/stable/

python中创建以及写入excel文件

from openpyxl import Workbook
from openpyxl.utils import get_column_letter

wb = Workbook()  //#实例化workbook

dest_filename = 'empty_book.xlsx'    //#命名文件

ws1 = wb.active  //#获取当前页签
ws1.title = "range names"  //#命名页签

for row in range(1, 40):  //#row:行
  ws1.append(range(600))

ws2 = wb.create_sheet(title="Pi")

ws2['F5'] = 3.14

ws3 = wb.create_sheet(title="Data")
for row in range(10, 20):
  for col in range(27, 54):
     _ = ws3.cell(column=col, row=row, value="{0}".format(get_column_letter(col)))
print(ws3['AA10'].value)
wb.save(filename = dest_filename)    //#保存文件

读取excel

from openpyxl import load_workbook
wb = load_workbook(filename = 'empty_book.xlsx')  #读取empty_book
sheet_ranges = wb['range names']      #页签
print(sheet_ranges['D18'].value)
  • 练习1

    • 写入一组身高体重excel文件

    • 读取写入的excel数据

    • 计算是否为健康体重,如果是健康体重,则在旁边备注健康,并打印(健康体重计算公式:(身高cm-70)*60%)

      from openpyxl import Workbook, load_workbook
      class PracticeExcel:
      def create_data(self):
          """
          创建excel数据
          :return:
          """
          wb =Workbook()
          ws1 = wb.active
          ws1.title = 'create'   #页签
          ws1["A1"] = '身高'
          ws1["B1"] = '体重'
          #方法1:列表写入
          # height = [180, 160, 170, 155]
          # weight = [60, 55, 60, 80]
          # for i in range(len(height)):
          #     ws1.cell(row=i+2,column=1).value = height[i]   #cell:找单元格(通过行列找),value去拿单元格的值
          #     ws1.cell(row=i+2,column=2).value = weight[i]
          #方法2:字典写入
          data_dict = {180:60,160:54,170:60,155:80}
          data_keys=[i for i in data_dict.keys()]
          for i in range(len(data_keys)):
              ws1.cell(row=i+2,column=1).value =data_keys[i]   #cell:找单元格(通过行列找),value去拿单元格的值
              ws1.cell(row=i+2,column=2).value = data_dict[data_keys[i]]
          wb.save("data.xlsx")
      
      def read_data(self):
          ld = load_workbook(filename="data.xlsx")
          sheet = ld["create"]
          for i in range(5):
              print(sheet.cell(row=i + 1, column=1).value)
      
      def heathy_data(self):
          ld = load_workbook(filename="data.xlsx")
          sheet = ld["create"]
          sheet.cell(row=1, column=3).value = "备注"
          for i in range(4):
              height = sheet.cell(row=i+2,column=1).value
              weight = sheet.cell(row=i+2,column=2).value
              heathy_weight = (height - 70) * 0.6
              if weight == heathy_weight:
                  print("这是一个健康体重",weight)
                  sheet.cell(row=i+2,column=3).value = "健康体重"
      
          ld.save(filename="data.xlsx")
      pe = PracticeExcel()
      pe.heathy_data()
  • 练习2

    • 1、打开百度

    • 2、输入搜索词

    • 3、点击搜索

    • 4、将元素定位和输入的数据使用的excel管理

      import time
      import selenium
      from openpyxl import Workbook, load_workbook
      from selenium import webdriver
      class SeleniumPython:
      def __init__(self):
         ld = load_workbook("./selenium.xlsx")
         self.ws = ld.worksheets[0]
         #print(self.ws["A2"].value)     #kw
      
      def go_baidu(self):
         """
         1、打开百度
         2、输入搜索词
         3、点击搜索
         将元素定位和输入的数据使用的excel管理
         :return:
         """
         #实例化driver
         driver = webdriver.Chrome()
         driver.get("https://www.baidu.com/")
      driver.find_element_by_id(self.ws["A2"].value).send_keys(self.ws["B2"].value)
         driver.find_element_by_id(self.ws["A3"].value).click()
         time.sleep(15)
       if __name__ == '__main__':
           sp = SeleniumPython()
           sp.go_baidu()
      __name__代表:如果是当前模块就返回一个__main__,如果是非当前模块,就不会返回__main__
      
      
      

YAML

YAML是一个可读性高,用来表达数据序列化的格式,常常作为配置文件使用

yaml.dump

  • yaml.dump函数接收一个Python对象并生成一个YAML文档
    • 直接转换
      import yaml
      data = [1,2,3]
      print(yaml.dump(data))
      打印结果:
      图片说明
    • 转换为yaml文件(生成一个.yml文件)
      with open("demo.yml","w") as f:
      yaml.dump(data,f)

      yaml.load(推荐使用yaml.safe_load,更加安全)

  • yaml.load可以将yaml格式/文件转换为列表/字典
    • 直接转yam格式
      图片说明
      打印:[1,2,3]
    • 将yaml文件转化为列表/字典
      print(yaml.safe_load(open("./demo.yml")))
      打印:[1,2,3]

yaml语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进的空格数不重要,只要相同层级的元素左侧对齐即可
  • “#”表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样

yaml支持的数据结构

  • 对象:键值对的集合(字典)——冒号后面一定要加空格
    • python中的字典在yaml中如何书写?
      • 图片说明
    • python中的字典嵌套字典在yaml中如何书写?
      data = {"a":1,"b":2,"c":{"a":4,"b":5,"z":6}}
      with open("./demo2.yml","w") as f:
      yaml.dump(data,f)
      结果:
      • 图片说明
  • 数组:列表——yaml里面写一个列表,前面加一个"-"符号
    • 列表:[1,2,3]
      图片说明
    • 嵌套[[2,3],[4,5]]
      图片说明
  • 纯量:单个的、不可再分的值、字符串、布尔值、整数、浮点数、Null、时间、日期
    • 1、int 和 float类型的数字
    • 2、布尔值用true和false表示
    • 3、None用~表示
    • 4、日期采用复合iso8601格式的年、月、日表示
    • 5、使用两个感叹号,强制转换数据类型
      yaml格式:
      int1: 1
      float1: 12.30
      bool1: true
      bool2: false
      none1: ~
      time: 2020-05-10
      n1: !!str 123
      打印结果:
      print(yaml.safe_load(open("./data_type.yml")))

yaml实例

使用yaml进行之前身高体重读取

import yaml
class PythonYaml:
    def __init__(self):
        self.data = yaml.safe_load(open("./data.yml"))

    def read_list(self):
        for i in range(len(self.data["height"])):
            print("身高是{},体重是{}".format(self.data["height"][i],self.data["weight"][i]))

if __name__ == '__main__':
    py = PythonYaml()
    py.read_list()

yaml文档:
图片说明
打印结果:
图片说明

全部评论

相关推荐

牛客鼠:校友你这简历基本无敌了,春招刷刷题去冲大厂
点赞 评论 收藏
分享
野猪不是猪🐗:这种直接口头上答应,骗面试,面完了直接拉黑,相当于给自己攒面经了(
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务