外部数据处理之Python

1 前言

在自动化测试过程中, 经常需要与外部文件打交道, 或是导入测试数据, 或是加载测试用例

外部文件可以有多种表现形式, 有人喜欢用excel, 有人喜欢用csv, 也有人喜欢用yml

不同的形式有着不同的处理方式, 为避免遗忘, 特在此记录

2 纯文本

2.1 CSV

csv一般以TAB作为分隔符, 但也可以使用|, ,

csv表现形式与Excel想像, 但本质还是普通文本, 处理比较容易

样本数据, 包含数据头, 且以\t分隔:

name    age favor
Lili    19  Art
Ming    18  Math
Kate    15  Game

内置库CSV可以轻松搞定, 当然用pandas只需一句话

// import csv
with open(file) as fp:
    reader = csv.DictReader(fp, delimiter='\t')
    datas = [row for row in reader]
    
// import pandas as pd
df = pd.read_csv(file, sep='\t')

2.2 XML

样本数据:



    
        Chinese Food
        28.8
    
    
        JVM
        39.5
    

  • getroot() 获取根节点
  • iter(childNode) 可以迭代指定子节点
  • items() 获取节点属性
  • list(node) 列出子节点
from xml.etree import ElementTree as ET

datas = []
tree = ET.parse('data.xml')
root = tree.getroot()
for book in root.iter('book'):
    # print(book.items())
    data = {}
    for field in list(book):
        data[field.tag] = field.text
    datas.append(data)

2.3 JSON

文件的话, 直接使用load方法; 如果读取了现成的json字符串, 则使用loads

with open('data.json') as fp:
    data = json.load(fp)

3 INI

import configparser

datas = {}
parser = configparser.ConfigParser()
parser.read('data.ini', encoding='utf-8')
for section in parser.sections():
    data = {}
    for option in parser.options(section):
        data[option] = parser.get(section, option)
    datas[section] = data

4 YML

需要安装PyYAML模块

safe_load相较于load, 对yaml语法有严格限制, 禁止自由定制

with open('data.yml') as fp:
    data = yaml.safe_load(fp)

5 Excel

安装xlrd库, 支持xlsx格式; openpyxl库也可以处理

import xlrd

workbook = xlrd.open_workbook('data.xlsx')
for name in workbook.sheet_names(): //获取sheet名称
    sheet = workbook.sheet_by_name(name)
    row_num = sheet.nrows   // 获取行数
    col_num = sheet.ncols    // 获取列数

    for i in range(row_num):
        // 列表形式返回某一行数据, 
        print(sheet.row_values(i))

    // 获取单元格数值, 行列起始均为0
    print(sheet.cell(rowx=1, colx=1).value)

你可能感兴趣的:(外部数据处理之Python)