基于Python生成中文测试数据

2019-05-06 17:27:32 浏览数 (1)

在测试中,我们经常需要批量的生成各种测试数据,尤其是需要生成大量的中文测试数据,例如姓名,地址等等。

下面我们先看一个直接写Python代码生成中文的实例

代码语言:javascript复制
# -*- coding: utf-8 -*-
__author__ = "苦叶子"
"""
    生成中文实例
"""
import random

# 直接基于unicode码生成
# 在unicode码中,汉字范围是(0x4E00, 0x9FBF)
def unicode_zh():
    # 随机生成一个汉字码
   zh = random.randint(0x4E00, 0x9FBF)

    # 转换下,返回
   return chr(zh)


# 基于gbk2312码生成
# 在gbk2312码中,字符的编码采用两个字节组合
# 汉字第一个字节范围是(0xB0, 0xF7)
# 汉字第二个字节范围是(0xA1, 0xFE)
def gbk2312_zh():
    # 生成第一个字节
   first = random.randint(0xB0, 0xF7)
    # 生成第二个字节
   last = random.randint(0xA1, 0xFE)

    # 组合一下
   s = f'{first:x}{last:x}'
   # 转换成汉字
   zh = bytes.fromhex(s).decode('gb2312')

    # 返回
   return zh


# 主函数
if __name__ == "__main__":
    # 基于unicode模式生成10个汉字
   for _ in range(10):
        print(unicode_zh())

    print("------上面的汉字是不是很多不认识, 哈哈哈------nn")

    print("------下面的汉字是不是认识很多-------")

    # 基于gb2312模式生成10个汉字
   for _ in range(10):
print(gbk2312_zh())

运行结果如下

几点说明:

1. 基于unicode码方式生成的汉字,因为总计约有2万多个汉字,因此在随机生成时,会很容易生成生僻字

2. 基于gbk2312码生成的汉字,大概有6千个常用的汉字,所以生成的汉字,我们大多都认识

所以根据这两点,你大体可以知道在自己去原生构造汉字生成功能时,应该怎么去使用了。

看了上面简单的实例,是不是觉得生成汉字比较容易呢?

那如何生成中文名字呢?

你要不要自己试试?

说下简单的思路,随便找个百家姓的网页,把所有的姓爬取下来弄成一个姓氏库,至于名嘛,随便用用常用的汉字组合下

我们看一个简单的实例

代码语言:javascript复制
# -*- coding: utf-8 -*-
__author__ = "苦叶子"
import random

# 导入汉字生成函数
from test_data_zh_CN import *


""""
    简单生成中文名
"""
# 百家姓列表
FIRST_NAME = ['赵', '钱', '孙', '李', '周', '吴', '郑', '王', '冯', '陈', '褚', '卫', '蒋', '沈', '韩', '杨', '朱', '秦', '尤', '许',
'何', '吕', '施', '张', '孔', '曹', '严', '华', '金', '魏', '陶', '姜', '戚', '谢', '邹', '喻', '柏', '水', '窦', '章',
'云', '苏', '潘', '葛', '奚', '范', '彭', '郎', '鲁', '韦', '昌', '马', '苗', '凤', '花', '方', '俞', '任', '袁', '柳',
'酆', '鲍', '史', '唐', '费', '廉', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常',
'乐', '于', '时', '傅', '皮', '卞', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹',
'姚', '邵', '堪', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '臧', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞',
'熊', '纪', '舒', '屈', '项', '祝', '董', '梁']


if __name__ == "__main__":
    # 随便生成下名字啦
for _ in range(10):
        first = FIRST_NAME[random.randint(0, len(FIRST_NAME))]
        name = gbk2312_zh()
print(first   name)

运行结果

随机生成了10个名字,看着是不是像名字了?

后续我们基于开源库来实现,就会觉得更方便了,这篇只是展现下基本的原理,可以了解下的!!!

0 人点赞