接口测试中,需要把数据写入文件,再读取文件数据。大多数的文件写入都要求参数类型为字符型。比如txt,csv,xlsx

image.png
不少同学,写入文件时看到报错信息,直接使用字符型强制转换,直接写入文件。
dict = {"a": "b","c": "d"}
str_dict =str(dict)
file_name = DATA_DIR+"/demo.txt"
with open(file_name,"w",encoding="utf-8") as f:
    f.write(str_dict)
f.close()
终于闯关成功,把数据写入了文件,到了读取数据的时候了
with open(file_name,"r",encoding="utf-8") as f:
    file_context = f.read()
    print(file_context)
f.close()
print(file_context,type(file_context))
=>{'a': 'b', 'c': 'd'} <class 'str'>
读数据好像也没有什么问题,数据终于等到了高光时候。使用数据传入接口参数的时候,自己挖的坑还是得自己来填呀。。
#转换成python对象dict型
import json
json.loads(file_context)
=>以下是报错信息
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "D:\Program Files\Python37\lib\json\__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "D:\Program Files\Python37\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "D:\Program Files\Python37\lib\json\decoder.py", line 353, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
错误原因: 这个错误是由于json.loads()接受的参数不是json定义的标准格式。key值不是使用的双引号,而是单引号!!!!
json遵循“key-value”的这样一种方式。比如:{"name" : "zhuxiao5"}。Json的key需要严格使用双引号;但是python 字典型dict,key使用单引号/双引号都可以
dict = {"a": "b","c": "d"}
dict1 = {'a':'b'}
type(dict) => <class 'dict'>
type(dict1) => <class 'dict'>
假如你也遇到了以上的问题,那下面的内容应该可以帮到你。
Json简介
Json(JavaScript Object Notation)
很多网站都会用到Json格式来进行数据的传输和交换。
这因为Json是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点。用它来进行前后端的数据传输,大大的简化了服务器和客户端的开发工作量。
以下是避坑的两个解决方案:
【方法一】数据写入文件时,不直接使用str,强制转换成字符型存入文件,使用json.dumps()
#写入文件
import json
from Common.project_path import *
dict = {"a": "b","c": "d"}
str_dict =str_dict =json.dumps(dict)
file_name = DATA_DIR+"/demo.txt"
with open(file_name,"w",encoding="utf-8") as f:
    f.write(str_dict)
f.close()
#读取文件,json.loads()格式转换为python对象
with open(file_name,"r",encoding="utf-8") as f:
    file_context = f.read()
    print(file_context)
f.close()
print(file_context,type(file_context))
=>{"a": "b", "c": "d"} <class 'str'>
json.loads(file_context)
=>{'a': 'b', 'c': 'd'}
【方法二】数据写入文件时,直接存储成json文件,使用json.dump(),json.load()转换数据格式
#python对象,直接存入文件
import json
from Common.project_path import *
dict = {"a": "b","c": "d"}
file_name = DATA_DIR+"/demo.json"
with open(file_name,"w",encoding="utf-8") as f:
    json.dump(dict,f)
f.close()
#直接读取json文件数据
with open(file_name,"r",encoding="utf-8") as f:
    data = json.load(f)
    print(data,type(data))
f.close()
=>{'a': 'b', 'c': 'd'} <class 'dict'>