在测试中,我们经常需要批量的生成各种测试数据,尤其是需要生成大量的中文测试数据,例如姓名,地址等等。
下面我们先看一个直接写Python代码生成中文的实例
# -*- 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("------上面的汉字是不是很多不认识, 哈哈哈------\n\n")
print("------下面的汉字是不是认识很多-------")
# 基于gb2312模式生成10个汉字
for _ in range(10):
print(gbk2312_zh())
运行结果如下
几点说明:
1. 基于unicode码方式生成的汉字,因为总计约有2万多个汉字,因此在随机生成时,会很容易生成生僻字
2. 基于gbk2312码生成的汉字,大概有6千个常用的汉字,所以生成的汉字,我们大多都认识
所以根据这两点,你大体可以知道在自己去原生构造汉字生成功能时,应该怎么去使用了。
看了上面简单的实例,是不是觉得生成汉字比较容易呢?
那如何生成中文名字呢?
你要不要自己试试?
说下简单的思路,随便找个百家姓的网页,把所有的姓爬取下来弄成一个姓氏库,至于名嘛,随便用用常用的汉字组合下
我们看一个简单的实例
# -*- 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个名字,看着是不是像名字了?