-
例:showwarning(警告)123456789# 声明函数def warning(): # 弹出对话框 result = tkinter.messagebox.showwarning(title = '出错了!',message='内容:十八岁以下禁止进入。') # 返回值为:ok print(result)# 添加按钮btn1 = tkinter.Button(root,text = 'warning',command = warning)btn1.pack() 示例:showinto (信息提示)123456789# 声明函数def info(): # 弹出对话框 result = tkinter.messagebox.showinfo(title = '信息提示!',message='内容:您的女朋友收到一只不明来历的口红!') # 返回值为:ok print(result)# 添加按钮btn1 = tkinter.Button(root,text = 'info',command = info)btn1.pack()2.simpledialog 简单信息对话框 示例:asksting(获取字符串)123456789101112131415161718192021import tkinter# 导入子模块import tkinter.simpledialog # 创建主窗口root = tkinter.Tk()# 设置窗口大小root.minsize(300,300) # 创建函数def askname(): # 获取字符串(标题,提示,初始值) result = tkinter.simpledialog.askstring(title = '获取信息',prompt='请输入姓名:',initialvalue = '可以设置初始值') # 打印内容 print(result)# 添加按钮btn = tkinter.Button(root,text = '获取用户名',command = askname)btn.pack() # 加入消息循环root.mainloop() 示例:askinteger(获取整型)123456789101112131415161718192021import tkinter# 导入消息对话框子模块import tkinter.simpledialog # 创建主窗口root = tkinter.Tk()# 设置窗口大小root.minsize(300,300) # 创建函数def askage(): # 获取整型(标题,提示,初始值) result = tkinter.simpledialog.askinteger(title = '获取信息',prompt='请输入年龄:',initialvalue = '18') # 打印内容 print(result)# 添加按钮btn = tkinter.Button(root,text = '获取年龄',command = askage)btn.pack() # 加入消息循环root.mainloop() 示例:askfloat(获取浮点型)123456789101112131415161718192021import tkinter# 导入消息对话框子模块import tkinter.simpledialog # 创建主窗口root = tkinter.Tk()# 设置窗口大小root.minsize(300,300) # 创建函数def askheight(): # 获取浮点型数据(标题,提示,初始值) result = tkinter.simpledialog.askfloat(title = '获取信息',prompt='请输入身高(单位:米):',initialvalue = '18.0') # 打印内容 print(result)# 添加按钮btn = tkinter.Button(root,text = '获取身高',command = askheight)btn.pack() # 加入消息循环root.mainloop()
-
1.messagebox 消息对话框 示例:askokcancel1234567891011121314151617181920import tkinter# 导入消息对话框子模块import tkinter.messagebox # 创建主窗口root = tkinter.Tk()# 设置窗口大小root.minsize(300,300) # 声明函数def okqqq(): # 弹出对话框 result = tkinter.messagebox.askokcancel(title = '标题~',message='内容:要吃饭嘛?') # 返回值为True或者False print(result)# 添加按钮btn1 = tkinter.Button(root,text = 'ok',command = okqqq)btn1.pack() # 加入消息循环root.mainloop() 示例:askquestion123456789101112131415161718192021import tkinter# 导入消息对话框子模块import tkinter.messagebox # 创建主窗口root = tkinter.Tk()# 设置窗口大小root.minsize(300,300) # 声明函数def question(): # 弹出对话框 result = tkinter.messagebox.askquestion(title = '标题',message='内容:你吃饭了嘛?') # 返回值为:yes/no print(result)# 添加按钮btn1 = tkinter.Button(root,text = 'question',command = question)btn1.pack() # 加入消息循环root.mainloop() 示例:askretrycancel (重试)12345678910111213141516171819import tkinter# 导入消息对话框子模块import tkinter.messagebox # 创建主窗口root = tkinter.Tk()# 设置窗口大小root.minsize(300,300)# 声明函数def retry(): # 弹出对话框 result = tkinter.messagebox.askretrycancel(title = '标题',message='内容:女生拒绝了你!?') # 返回值为:True或者False print(result)# 添加按钮btn1 = tkinter.Button(root,text = 'retry',command = retry)btn1.pack()# 加入消息循环root.mainloop() 示例:askyesno123456789# 声明函数def yesno(): # 弹出对话框 result = tkinter.messagebox.askyesno(title = '标题',message='内容:你喜欢我吗?') # 返回值为:True或者False print(result)# 添加按钮btn1 = tkinter.Button(root,text = 'yesno',command = yesno)btn1.pack() 示例:showerror (出错)123456789# 声明函数def error(): # 弹出对话框 result = tkinter.messagebox.showerror(title = '出错了!',message='内容:你的年龄不符合要求。') # 返回值为:ok print(result)# 添加按钮btn1 = tkinter.Button(root,text = 'error',command = error)btn1.pack()
-
第一种123456789101112131415161718192021222324252627282930313233343536import win32clipboardimport time#速度快 容易出错class niubi(): def lihai(self): while True: #jianting().main() t = jianting().main() print(t) class jianting(): def clipboard_get(self): """获取剪贴板数据""" win32clipboard.OpenClipboard() data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT) win32clipboard.CloseClipboard() return data def main(self): """后台脚本:每隔0.2秒,读取剪切板文本,检查有无指定字符或字符串,如果有则执行替换""" # recent_txt 存放最近一次剪切板文本,初始化值只多执行一次paste函数读取和替换 recent_txt = self.clipboard_get() while True: # txt 存放当前剪切板文本 txt = self.clipboard_get() # 剪切板内容和上一次对比如有变动,再进行内容判断,判断后如果发现有指定字符在其中的话,再执行替换 if txt != recent_txt: # print(f'txt:{txt}') recent_txt = txt # 没查到要替换的子串,返回None return recent_txt # 检测间隔(延迟0.2秒) time.sleep(0.2) if __name__ == '__main__': niubi().lihai()速度快,但很容易出错, 一般人感觉不出来速度。 不建议使用。方法二:12345678910111213141516171819202122232425262728293031323334import pyperclipimport time #稳定不出错class niubi(): def lihai(self): while True: #jianting().main() t = jianting().main() print(t)class jianting(): def clipboard_get(self): """获取剪贴板数据""" data = pyperclip.paste() #主要这里差别 return data def main(self): """后台脚本:每隔0.2秒,读取剪切板文本,检查有无指定字符或字符串,如果有则执行替换""" # recent_txt 存放最近一次剪切板文本,初始化值只多执行一次paste函数读取和替换 recent_txt = self.clipboard_get() while True: # txt 存放当前剪切板文本 txt = self.clipboard_get() # 剪切板内容和上一次对比如有变动,再进行内容判断,判断后如果发现有指定字符在其中的话,再执行替换 if txt != recent_txt: # print(f'txt:{txt}') recent_txt = txt # 没查到要替换的子串,返回None return recent_txt # 检测间隔(延迟0.2秒) time.sleep(0.2) if __name__ == '__main__': niubi().lihai()我一般把第二种 用在程序中。
-
为什么会出现黏包现象: 首先只有在TCP协议中才会出现黏包现象,是因为TCP协议是面向流的协议,在发送的数据传输的过程中还有缓存机制来避免数据丢失,因此,在连续发送小数据的时候,以及接收大小不符的时候容易出现黏包现象。本质还是因为我们在接收数据的时候不知道发送的数据的长短。解决黏包问题 在传输大量数据之前首先告诉接收端要发送的数据大小,如果想更漂亮的解决问题,可以通过struct模块来定制协议。struct模块: 功能:可以把一个类型,如数字,转成固定长度的bytes。1234567import struct ret = struct.pack('i',456872783) #'i'代表int,就是即将要把一共数字转换成固定长度(4个字节)的bystes类型print(ret) num = struct.unpack('i',ret) #转换回来,返回一个元组print(num[0]) #提前元组中的值得到4096解决黏包问题: 服务端:123456789101112131415161718import structimport socketsk = socket.socket()sk.bind(('127.0.0.1',8080))sk.listen()conn,addr = sk.accept()while True: cmd = input('>>>') if cmd == 'q': #当输入‘q'时,结束,并向客户端发送一个'q'。 conn.send(b'q') break conn.send(cmd.encode('gbk')) #将输入的cmd命令发送给客户端 num = conn.recv(4) #接收字节信息(返回的消息长度信息)。 num = struct.unpack('i',num)[0] #将接收的字节码转化为原来的类型并放在一个元组里面,后面加[0]是提前出元组中的值。 res = conn.recv(int(num)).decode('gbk') #接收长度为num 的消息。 print(res) #打印conn.close()sk.close() 客户端:123456789101112131415161718192021import structimport socketimport subprocess sk = socket.socket()sk.connect(('127.0.0.1',8080))while True: cmd = sk.recv(1024).decode('gbk') #接收服务端发送来的cmd命令 if cmd == 'q': #当接收到‘q'时,结束。 break # 在客户端执行接收到的cmd命令。并将正确的消息和错误的消息分别放入stdout和stderr管道。 res = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) std_out = res.stdout.read() #读取管道内正确的消息 std_err = res.stderr.read() #读取管道内错误的消息 len_num = len(std_out)+len(std_err) #计算正确和错误消息的总长度 num_by = struct.pack('i',len_num) #将消息总长度转换成长度为4的字节码 sk.send(num_by) #发送消息长度信息 sk.send(std_out) #发送正确消息 sk.send(std_err) #发送错误消息 sk.close()
-
需要用到的库:tkinter:构建gui界面pyperclip:复制功能random:生成随机数string:处理字符串代码:12345678910111213141516171819202122232425262728293031323334353637383940414243from tkinter import *import random, stringimport pyperclip root =Tk()root.geometry("400x400")root.resizable(0,0)root.title("密码生成器") heading = Label(root, text = '密码' , font ='arial 15 bold').pack() pass_label = Label(root, text = '密码长度', font = 'arial 10 bold').pack()pass_len = IntVar()length = Spinbox(root, from_ = 8, to_ = 32 , textvariable = pass_len , width = 15).pack() pass_str = StringVar() def Generator(): password = '' for x in range (0,4): password = random.choice(string.ascii_uppercase)+random.choice(string.ascii_lowercase)+random.choice(string.digits)+random.choice(string.punctuation) for y in range(pass_len.get()- 4): password = password+random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits + string.punctuation) pass_str.set(password) Button(root, text = "获取密码" , command = Generator ).pack(pady= 5) Entry(root , textvariable = pass_str).pack() def Copy_password(): pyperclip.copy(pass_str.get()) Button(root, text = '复制密码', command = Copy_password).pack(pady=5) root.mainloop()运行效果:
-
【功能模块】spark2MRS版本为6.5.1.7【操作步骤&问题现象】1、运行客户的算法模型时报错【截图信息】报错日志信息如下【日志信息】(可选,上传日志内容或者附件)
-
林老师解你迷惑Q:Python学习的思维导图还有不?A:文末资源包自行下载。Q:Python在实际开发中,爬虫有哪些好用的框架?A:刚刚开始使用Python来做爬虫的话总是绕不开Scrapy这个在爬虫界久闻盛名的框架的,因为Scrapy很完美的展现了爬虫的整个流程,并且封装了很大在日常的爬虫开发过程中使用到的小工具,很适合新手来使用,其他的框架例如PySpider这种拥有可视化界面的爬虫框架也是很适合新手来入门。Q:如何爬取数据进行存储?A:爬虫爬取到的数据肯定是需要落地进行持久化存储的,具体的落地方式主要分为两种:文件以及数据库。文件的话可以存储在不同类型的文件当中,例如CSV、Excel都可以,数据库的方式相信是大家普遍会采用的方式,具体的数据库类型可以选择关系型数据库MySQL或是是基于文档型的数据库MongoDB,当然MongoDB对于建表的要求不是必须的,所以推荐大家优先使用MongoDB来存储,这样可以在爬虫开发的过程中不用去考虑字段的问题,先把数据存储下来之后再仔细考虑如何规划具体字段、如何使用数据的问题。Q:美国大选的爬虫代码哪里有?A:关注林老师微信公众号《技术拆解官》,一周内会有相关内容更新哦。林老师分享内容一览主题:通过美国大选案例介绍数据分析的基本思路以及用Python怎么将数据分析的思路落地?正文:一、用“钢筋铁骨”打造数据分析思维什么是数据分析?Key Word 适当的统计分析方法、大量的数据(深度和广度)、注入理解和经验、提取有用信息和形成结论。基本思路:1.商业理解、2.数据理解、3.数据准备、4.建立模型、5.模型评估、6.结果部署二、用Python落地“数据蓝图”Python(思维导图文末自取)三、爬200年数据分析“2020美国大选”敬请关注林老师微信公众号《技术拆解官》想要更多资源,请持续关注我们的活动……扫码加微信群,仅限200人开始时间11月12日 20:00活动介绍云享MindTalks是由华为云DevCloud团队携手云享专家共同策划进行的系列技术交流活动。各业界大咖纷纷现身群聊,以即时对话形式,来进行最直接的技术交流和思想碰撞。为保证极简极高效,活动仅二十分钟,开始即高潮,结束即群散。趁着美国大选还热乎,由技术拆解官我们的华为云云享专家林韩秋来为我们揭秘python是如何与美国大选扯上关系的以及如何练就数据分析思维如何让数据蓝图落地这么又干又热的货,就不要犹豫了专家介绍多年风控系统研发,华为云云享专家前猎豹移动、现好未来爬虫搜索工程师多年反爬场景对抗经验,社活跃潜水员区开源项目的狂热爱好者——林韩秋活动规则1.扫码加入群聊,仅限200人,手慢者即无。2.未能即时回复问题,由助手收集集中回答。3.微信群聊将于活动结束后三天内原地解散。4.抽奖的奖品为荣耀魔方蓝牙音箱(树莓红)和华为云定制礼品HE2E知识卡牌。
-
运行结果调用 Class1 初始化函数Class1 的姓名是:设置了名字调用 Class1 初始化函数Class1 的姓名是:设置了名字调用 Class1 初始化函数Class1 的姓名是:未定义姓名...----------------------------------------------------------------------Ran 3 tests in 0.000sOKProcess finished with exit code 0记录测试报告到txt文件12345678910111213141516171819# -*- encoding=utf-8 -*- import unittestfrom Test_Demo2 import CallClass1 if __name__ == '__main__': testSuite = unittest.TestSuite() testSuite.addTest(CallClass1('test_set_name')) testSuite.addTests( [CallClass1('test_set_name'), CallClass1('test_print_name')]) # textTestRunner = unittest.TextTestRunner() # textTestRunner.run(testSuite) # 将测试结果输出到测试报告中 with open('UnittestTextReport.txt', 'w') as f: runner = unittest.TextTestRunner(stream=f, verbosity=2) runner.run(testSuite)记录测试报告到html文件12345678# 将测试结果输出到测试报告html中with open('HTMLReport.html', 'w') as f: runner = HTMLTestRunner(stream=f, title='MathFunc Test Report', description='generated by HTMLTestRunner.', verbosity=2 ) runner.run(suite)断言当断言为真时,会执行断言之后的代码如(在断言之后打印成功提示信息)若断言为假,则之后的代码不会被执行,打应错误信息,之后提示信息不会被执行;unittest中提示F,失败,若捕获到异常,则为E,代表错误;补充:若断言为假,则当前函数def,停止运行,但会运行之后的def函数重点:try语句块中不要使用assert一起使用,assert断言为假时,会抛出异常,测试用例为失败,如果放到try中,则会捕获到异常,测试用例永远标记为通过断言结果:. 表示通过 或者 passF False, 表示断言没有通过E Error, 表示程序内部发生了错误。查找当前目录下所有的测试用例【默认以test开头的py文件,可以自己配置】12345678910111213# -*- encoding=utf-8 -*- import unittestimport os if __name__ == '__main__': loader = unittest.defaultTestLoader.discover(os.getcwd()) # tests = unittest.defaultTestLoader.discover( # start_dir='.', # => 指定查找的目录 # pattern='test*.py' # => 指定查找规则 # ) runner = unittest.TextTestRunner() runner.run(loader)
-
基本使用步骤:1、import unittest2、新建一个Class继承unittest.TestCase3、定义一个以test开头的函数作为测试用例【必须以test开头】4、执行测试用例前都会先调用Setup函数【每个测试用例调用一次】或者setupClass函数【所有测试用例仅调用一次】5、执行完测试用例后都会调用tearDown函数【多次】和tearDownClass函数【仅一次】PS:1、不能重写init()2、函数必须以test开头才能作为测试用例3、setupClass()和tearDownClass()必须用@classmethod修饰12345678910111213141516171819202122232425262728# -*- encoding=utf-8 -*- import unittestclass Demo1(unittest.TestCase): def setUp(self): print '调用 setup 函数' @classmethod def setUpClass(cls): print '调用 setupClass 函数' def tearDown(self): print '调用 tearDown 函数' @classmethod def tearDownClass(cls): print '调用 tearDownClass 函数' @staticmethod def test_add(): print '3 + 5 = {}'.format(3 + 5) @staticmethod def test_sub(): print '3 - 5 = {}'.format(3 - 5) if __name__ == '__main__': unittest.main()运行结果调用 setupClass 函数调用 setup 函数3 + 5 = 8调用 tearDown 函数调用 setup 函数3 - 5 = -2调用 tearDown 函数调用 tearDownClass 函数Ran 2 tests in 0.012sOKTestSuite【测试组】添加测试用例进行测试1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071# -*- encoding=utf-8 -*- class Class1(object): def __init__(self): print '调用 Class1 初始化函数' self.name = '未定义姓名' self.age = '未定义年龄' def set_name(self, name): self.name = name def set_age(self, age): self.age = age def print_name(self): print 'Class1 的姓名是:{}'.format(self.name) def print_age(self): print 'Class1 的年龄是:{}'.format(self.age) if __name__ == '__main__': pass # -*- encoding=utf-8 -*- import unittest from Class1 import Class1 class CallClass1(unittest.TestCase): def setUp(self): self.class1 = Class1() pass def tearDown(self): self.class1 = None pass def test_set_name(self): self.class1.set_name('设置了名字') self.class1.print_name() def test_print_name(self): self.class1.print_name() if __name__ == '__main__': unittest.main() # -*- encoding=utf-8 -*- import unittestfrom Test_Demo2 import CallClass1 if __name__ == '__main__': testSuite = unittest.TestSuite() testSuite.addTest(CallClass1('test_set_name')) testSuite.addTests( [CallClass1('test_set_name'), CallClass1('test_print_name')]) textTestRunner = unittest.TextTestRunner() textTestRunner.run(testSuite)
-
2020年末,华为云为开发者送福利来了!认证成为华为云开发者,开启个人技能画像,点亮开发者勋章,多重好礼等你来拿。已开启Java、Python、前端开发、API、低代码开发、敏捷教练等多个通道,哪个才是你的菜,是你未来的方向。赶快来测一测吧!【活动时间】2020年11月11日-2020年12月10日【活动内容】活动整体分三个阶段进行,认证成为华为云开发者后,专属福利逐级开启。 学习礼——争当开发者,不做尾款人 开启时间:11月11日 认证通过点亮专属勋章,开启个人技能画像。勋章查看地址:https://devcloud.huaweicloud.com/expert/assessment/skill获得会员中心200码豆,限量240000码豆,先到先得,发完即止。每个ID限领一次。码豆查看地址:https://devcloud.huaweicloud.com/bonususer/home/converge邀请5人以上(含5人)参加测评,将获得知识大礼包一份。同时获得抽奖资格,有机会获得50元京东卡和锦鲤大奖。测评完成后参与主题帖活动,还有机会获得时尚卫衣、电动牙刷等精美礼品。详情请点击链接参加:学习周 ——争当开发者,不做尾款人 抢兑礼——感恩回馈,限时兑换 开启时间:11月17日测评完成后参与主题帖活动,还有机会获得时尚卫衣、机械键盘等精美礼品。详情请点击链接参加:抢兑周—— 感恩回馈,限时兑换狂欢礼——大奖来袭,谁是锦鲤 开启时间:11月29日邀请5人以上(含5人)参与评测获得抽奖资格,将抽取幸运奖和锦鲤大奖。邀请点亮勋章人数排行榜的前3名获得排行奖,限量大狮运动套装、数码套装和京东卡200元奖励。测评完成后参与主题帖活动,还有机会获得时尚卫衣、移动快充等精美礼品。 活动详情请点击链接查看:狂欢周——大奖来袭,谁是锦鲤 当前论坛集赞和邀请排行榜请点击查看:排名帖链接。【参与方式】可以点击测评通道链接或者 扫描下方二维码参与测评【邀请好友方法】生成邀请链接和邀请好友参加方法如下:第一步:完成问卷填写,并提交。第二步:在问卷结束页,点击下面那个黄色按钮“邀请好友答卷 免费领取 知识大礼包”第三步:点击之后,会提示你需要在浏览器中打开分享页面,请点击右上角“...”按钮,选择“在浏览器打开”第四步:在浏览器中打开会显示如下页面,保存您的专属海报图片,分享出去即可,只要有朋友也答卷完成,即可获得相应的礼品和抽奖资格。后续也可以再打开此页面,查看你的邀请进度(页面最下方)。【活动说明】1.本次活动为华为云开发者身份测评认证,参与者首先要注册成为华为云用户,才能参与本次活动。2.活动期间,每位开发者可以多次参与答题,分数以最高成绩为准。3.每个华为云账号只能被邀请一次。4.本次活动所有回帖内容需满足华为云论坛发帖规范:https://bbs.huaweicloud.com/forum/thread-23077-1-1.html5.不得使用各类非正常渠道或方式注册账号参与,违者取消活动参与及获奖资格;获奖人收件信息与实名信息不一致者或获奖人从未参与过测评,亦不予发奖。5.获奖情况的公示和获奖通知后续会在论坛发出,请关注本帖。6.所有获奖礼品将于12月30日前寄出。7.如您在测评活动中遇到相关问题,可点击下方链接反馈,请于12月15日24时前反馈,过期反馈视为无效,望周知。 反馈链接>>
-
profile 人物描述信息123456789101112>>> fake.profile(fields=None, sex=None) # 人物描述信息:姓名、性别、地址、公司等{'job': 'Licensed conveyancer', 'company': '万迅电脑信息有限公司', 'ssn': '370684199902182726', 'residence': '福建省小红市南长广州街K座 406448', 'current_location': (Decimal('18.050895'), Decimal('-0.877117')), 'blood_group': '0-', 'website': ['https://www.yi.org/', 'https://www.hu.com/', 'https://www.yin.cn/'], 'username': 'minghuang', 'name': '后英', 'sex': 'F', 'address': '安徽省秀荣市璧山嘉禾路T座 954960', 'mail': 'czhong@hotmail.com', 'birthdate': '1975-03-09'}>>> s = fake.simple_profile(sex="m") # 人物精简信息>>> for i,v in s.items():... print(i,v)...username chao85name 邴宇sex Maddress 陕西省东市朝阳廖街Y座 757661mail xiazhang@gmail.combirthdate 1996-09-20ssn 社会安全码(身份证)1234>>> fake.ssn() # 随机生成身份证号(18位)'140100196612297997'>>> len(fake.ssn())18user_agent 用户代理常用在伪造浏览器信息12>>> fake.user_agent() # 伪造UA'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/5361 (KHTML, like Gecko) Chrome/15.0.812.0 Safari/5361'平台信息伪造12345678910>>> fake.linux_platform_token()'X11; Linux i686'>>> fake.linux_processor()'i686'>>> fake.windows_platform_token()'Windows CE'>>> fake.mac_platform_token()'Macintosh; Intel Mac OS X 10_7_4'>>> fake.mac_processor()'PPC'浏览器伪造12345678910>>> fake.internet_explorer() # IE浏览器'Mozilla/5.0 (compatible; MSIE 5.0; Windows NT 6.1; Trident/4.0)'>>> fake.opera() # opera浏览器'Opera/9.37.(Windows 95; doi-IN) Presto/2.9.178 Version/10.00'>>> fake.firefox() # firefox浏览器'Mozilla/5.0 (Windows NT 5.0; te-IN; rv:1.9.2.20) Gecko/2015-09-28 13:29:05 Firefox/12.0'>>> fake.safari() # safari浏览器'Mozilla/5.0 (Windows; U; Windows NT 4.0) AppleWebKit/533.37.4 (KHTML, like Gecko) Version/5.0 Safari/533.37.4'>>> fake.chrome() # chrome浏览器'Mozilla/5.0 (Windows 98; Win 9x 4.90) AppleWebKit/5361 (KHTML, like Gecko) Chrome/14.0.866.0 Safari/5361'自定义扩展Faker 已经提供了足够丰富的信息生成,包括名字、手机号、邮箱地址、邮编等等。尽管如此,可能还是没有办法满足你的需求。这时,可以利用自定义扩展,引用外部的 provider,自定义你要的功能。Faker 对象可以通过 add_provider 方法将自定义的 Provider 添加到对象中,自定义的 Provider 需要继承自 BaseProvider。12345678910111213141516from faker import Fakerfake = Faker() # first, import a similar Provider or use the default onefrom faker.providers import BaseProvider # create new provider classclass MyProvider(BaseProvider): def foo(self): return 'bar' # then add new provider to faker instancefake.add_provider(MyProvider) # now you can use:print(fake.foo())结果显示:bar随机控制Faker 随机生成由 random.Random 驱动。其中,.random 属性返回 random.Random 对象。通过对该对象的操作,可以实现自定义的行为。1234from faker import Fakerfake = Faker()fake.randomfake.random.getstate()安装:1pip install faker使用:1234from faker import Fakerfake = Faker()for i in range(0,10): print(fake.name())不做进一步的解释了哈,
-
file 文件12345678>>> fake.file_name(category="image", extension="png") # 文件名(指定文件类型和后缀名)'增加.png'>>> fake.file_name() # 随机生成各类型文件'提供.pdf'>>> fake.file_extension(category=None) # 文件后缀'txt'>>> fake.mime_type(category=None) # mime-type'image/png'internet 互联网12345678910111213141516171819202122232425262728293031323334>>> fake.ipv4(network=False) # ipv4地址'104.225.105.10'>>> fake.ipv6(network=False) # ipv6地址'dea6:ca11:39d0:b49f:fff1:82f1:bf88:698b'>>> fake.uri_path(deep=None) # uri路径'search/categories'>>> fake.uri_extension() # uri扩展名'.htm'>>> fake.uri() # uri'https://www.wei.com/terms/'>>> fake.url() # url'http://zheng.org/'>>> fake.image_url(width=None, height=None) # 图片url'https://www.lorempixel.com/700/990'>>> fake.domain_word() # 域名主体'hu'>>> fake.domain_name() # 域名'hu.cn'>>> fake.tld() # 域名后缀'com'>>> fake.user_name() # 用户名'xia13'>>> fake.user_agent() # UA'Opera/8.33.(Windows NT 5.1; an-ES) Presto/2.9.171 Version/10.00'>>> fake.mac_address() # MAC地址'd6:38:cc:2a:76:b2'>>> fake.safe_email() # 安全邮箱'mingli@example.net'>>> fake.free_email() # 免费邮箱'tao44@gmail.com'>>> fake.company_email() # 公司邮箱'jingzhong@wang.cn'>>> fake.email() # 邮箱'changjun@hao.com'job 工作1234>>> fake.job()#工作职位'Dealer'>>> fake.job() 'Musician'lorem 乱数假文12345678910111213141516>>> fake.text(max_nb_chars=200) # 随机生成一篇文章'语言无法应用为什一点国内.要求完成如何世界电脑发布作品.经济不同教育个人科技全国.\n在线学生发布信息上海状态.\n联系一次通过其实介绍世界.增加也是使用成功那个.\n商品免费管理公司.留言自己这种内容.\n次数内容知道这样女人感觉.操作他的生产出现如何报告文章只有.\n个人文化中心不能发布最新.质量一下提高.感觉最大工具表示最后计划.这是还有次数结果其实特别.' >>> fake.word() # 随机单词'能力'>>> fake.words(nb=3) # 随机生成几个字['国家', '经营', '结果']>>> fake.sentence(nb_words=6, variable_nb_words=True) # 随机生成一个句子'重要更多我们作品地方增加.'>>> fake.sentences(nb=3) # 随机生成几个句子['制作上海学生.', '方式汽车一样技术帮助欢迎.', '说明一种深圳经营电话帖子.']>>> fake.paragraph(nb_sentences=3, variable_nb_sentences=True) # 随机生成一段文字(字符串)'非常环境位置有限发展首页行业.情况对于出现部门这种觉得.产品以后因为虽然由于日本不同.' >>> fake.paragraphs(nb=3) # 随机生成成几段文字(列表)['就是发布要求有关这里国际.美国设备深圳经营.首页也是支持报告.', '决定可是只有发现开始一直.最后有些项目正在深圳关系决定.下载注册图片更多进行他的那些.', '必须他们发生数据准备联系.同时这样内容学校精华.']misc 杂项1234567891011121314151617181920212223242526272829>>> fake.binary(length=10) # 随机二进制字符串(可指定长度)b'U\xa9@\x1e\x96\xe7\xca\x82\x14f' >>> fake.language_code() # 随机语言代码'tg' >>> fake.md5(raw_output=False) # 随机md5,16进制字符串'cc4feebe419791332bbcff5e0fdf084a' >>> fake.sha1(raw_output=False) # 随机sha1,16进制字符串'8ac0e9980f880860b6e45ae6fd257cc847b7ae8d' >>> fake.sha256(raw_output=False) # 随机sha256,16进制字符串'033151f173f4a389e38e7df2363d89741f752c474e7bdfa2ee0a794bf0b505b5' >>> fake.boolean(chance_of_getting_true=50) # 随机真假值(得到True的几率是50%)False >>> fake.null_boolean() # 随机真假值和null>>> fake.null_boolean()True >>> fake.password(length=10, special_chars=True, digits=True, upper_case=True, lower_case=True) # 随机密码(可指定密码策略)'F%722TJg_U'>>> fake.locale() # 随机本地代码'hy_AM'>>> fake.uuid4() # 随机uuid'a50d17e7-bc4f-37a3-27b3-04a24fdd0055'>>>phone_number 电话号码1234>>> fake.phone_number() # 手机号码'13334603608'>>> fake.phonenumber_prefix() # 运营商号段,手机号码前三位158
-
简介使用faker可以获取很多模拟数据,如:姓名、电话、地址、银行、汽车、条形码、公司、信用卡、email、user_agen等等学会使用这个库,再也不用为制造假数据发愁了。。。。。。同时,使用起来非常简单,只需要安装,导入库,并创建实例,即可使用,如下:主要的方法分类如上面例子,每次调用 fake 实例的 name()方法时,都会产生不同随机姓名。fake 实例还有很多方法可用,这些方法分为以下几类:address 地址person 人物类:性别、姓名等barcode 条码类color 颜色类company 公司类:公司名、公司email、公司名前缀等credit_card 银行卡类:卡号、有效期、类型等currency 货币date_time 时间日期类:日期、年、月等file 文件类:文件名、文件类型、文件扩展名等internet 互联网类job 工作lorem 乱数假文misc 杂项类phone_number 手机号码类:手机号、运营商号段python python数据profile 人物描述信息:姓名、性别、地址、公司等ssn 社会安全码(身份证号码)user_agent 用户代理address 地址123456789101112131415161718>>> fake.country() # 国家'奥地利'>>> fake.city() # 城市'郑州市'>>> fake.city_suffix() # 城市的后缀,中文是:市或县'市'>>> fake.address() # 地址'河北省巢湖县怀柔南宁路f座 169812'>>> fake.street_address() # 街道'邯郸路W座'>>> fake.street_name() # 街道名'合肥路'>>> fake.postcode() # 邮编'314548'>>> fake.latitude() # 维度Decimal('68.0228435')>>> fake.longitude() # 经度Decimal('155.964341')person 人物1234567891011121314>>> fake.name() # 姓名'单玉珍'>>> fake.last_name() # 姓'潘'>>> fake.first_name() # 名'琴'>>> fake.name_male() # 男性姓名'官平'>>> fake.last_name_male() # 男性姓'安'>>> fake.first_name_male() # 男性名'文'>>> fake.name_female() # 女性姓名'许颖'barcode 条码123456>>> fake.ean8() # 8位条码'12771363'>>> fake.ean13() # 13位条码'9133134950963'>>> fake.ean(length=8) # 自定义位数条码,只能选8或者13'20417161'color 颜色123456789101112>>> fake.hex_color() # 16进制表示的颜色'#671f6d'>>> fake.rgb_css_color() # css用的rgb色'rgb(237,74,237)'>>> fake.rgb_color() # 表示rgb色的字符串'208,102,218'>>> fake.color_name() # 颜色名字'Brown'>>> fake.safe_hex_color() #安全16进制色'#ee4400'>>> fake.safe_color_name() # 安全颜色名字'maroon'company 公司1234>>> fake.company() # 公司名'时空盒数字科技有限公司'>>> fake.company_suffix() # 公司名后缀'科技有限公司'credit_card 银行信用卡12345678910>>> fake.credit_card_number(card_type=None) # 卡号'375325478746231'>>> fake.credit_card_provider(card_type=None) # 卡的提供者'VISA 13 digit'>>> fake.credit_card_security_code(card_type=None)# 卡的安全密码'450'>>> fake.credit_card_expire() # 卡的有效期'04/22'>>> fake.credit_card_full(card_type=None) # 完整卡信息'Maestro\n秀芳 商\n502001016117 04/27\nCVV: 144\n'currency 货币12>>> fake.currency_code() # 货币代码'HNL'date_time 时间日期1234567891011121314151617181920212223242526272829303132333435363738394041424344>>> fake.date_time(tzinfo=None) # 随机日期时间datetime.datetime(2001, 3, 18, 17, 57, 44)>>> fake.iso8601(tzinfo=None) # 以iso8601标准输出的日期'1973-11-16T22:58:37' >>> fake.date_time_this_month(before_now=True, after_now=False, tzinfo=None) # 本月的某个日期datetime.datetime(2017, 11, 1, 14, 33, 48)>>> fake.date_time_this_year(before_now=True, after_now=False, tzinfo=None) # 本年的某个日期datetime.datetime(2017, 3, 2, 13, 55, 31)>>> fake.date_time_this_decade(before_now=True, after_now=False, tzinfo=None) # 本年代内的一个日期datetime.datetime(2010, 3, 26, 6, 33, 23)>>> fake.date_time_this_century(before_now=True, after_now=False, tzinfo=None) # 本世纪一个日期datetime.datetime(2015, 7, 21, 19, 27, 53)>>> fake.date_time_between(start_date="-30y", end_date="now", tzinfo=None) # 两个时间间的一个随机时间datetime.datetime(2005, 12, 3, 17, 17, 15) >>> fake.timezone() # 时区'America/Guatemala'>>> fake.time(pattern="%H:%M:%S") # 时间(可自定义格式)'11:21:52'>>> fake.am_pm() # 随机上午下午'PM'>>> fake.month() # 随机月份'02'>>> fake.month_name() # 随机月份名字'August'>>> fake.year() # 随机年'1974'>>> fake.day_of_week() # 随机星期几'Sunday'>>> fake.day_of_month() # 随机月中某一天'02'>>> fake.time_delta() # 随机时间延迟datetime.timedelta(13371, 27637)>>> fake.date_object() # 随机日期对象datetime.date(1983, 1, 26)>>> fake.time_object() # 随机时间对象datetime.time(17, 8, 56)>>> fake.unix_time() # 随机unix时间(时间戳)1223246848>>> fake.date(pattern="%Y-%m-%d") # 随机日期(可自定义格式)'1984-04-20'>>> fake.date_time_ad(tzinfo=None) # 公元后随机日期datetime.datetime(341, 9, 11, 8, 6, 9)
-
近小编遇到一个生存问题,女朋友让我给她翻译英文化妆品标签。美其名曰:"程序猿每天英语开发,英文一定很好吧,来帮我翻译翻译化妆品成分",”来,帮我看看这个面膜建议敷几分钟“。。。。看来斥巨资买化妆品不算完,还需要会各种英文介绍。默默收起大学考的一摞429分的四级证书,我打开了IDE。。。我打算开发一个能批量翻译的图片的demo,把家里的各种化妆品都翻译好。机智如我,是不会自己从训练模型做起的,打开有道智云的友好的AI接口页面 ,果然有图片翻译服务,体验了一下可是真不错,于是果断使用。效果展示Demo在这里,一起来看看效果吧:识别过程如下:逐个看看效果哈!make up for ever 虽然没翻译成玫珂菲,哈哈哈但是关键词长期保湿、固定喷雾都翻译出来了~~棒这个更是不明觉厉,韩文、英文混合都能翻译~~~樱花水的表现也不错哦~再乱入一个开起来更像包装盒的图片识别,效果不错,没受图片上文字倾斜等影响 :调用API的准备工作——生成调用所需要的应用id和密钥根据有道智云的接口约定,需要先在有道智云的个人页面上生成调用所需要的应用id和密钥,以便作为你的调用标识以及收费参考。。具体步骤是:在有道智云的个人页面上创建实例、创建应用、绑定应用和实例,获取调用接口用到的应用的id和密钥。具体个人注册的过程和应用创建过程详见文章分享一次批量文件翻译的开发过程开发过程介绍1、api接口介绍先介绍下该工程的核心部分,有道智云图片翻译服务的调用接口API HTTPS地址:https://openapi.youdao.com/ocrtransapi接口调用方式:POST请求格式:表单相应格式:JSON接口调用参数调用API需要向接口发送以下字段来访问服务。字段名类型含义必填备注typetext文件上传类型True目前支持Base64,请置该字段值为1fromtext源语言True参考下方的 支持语言 (可设置为auto)totext目标语言True参考下方的 支持语言 (可设置为auto)appKeytext应用IDTrue可在 应用管理 查看salttextUUIDTrue1995882C5064805BC30A39829B779D7Bsigntext签名Truemd5(应用Id+q+salt+应用密钥)exttext翻译结果音频格式,支持mp3falsemp3qtext要识别的图片truetype为1时必填,图片的Base64编码docTypetext服务器响应类型,目前只支持jsonfalsejsonrendertext是否需要服务端返回渲染的图片,0:否;1:是,默认是0false0nullIsErrortext如果ocr没有检测到文字,是否返回错误,false:否;true:是,默认是falsefalse注意是字符串签名生成方法如下:1、将请求参数中的 应用ID appKey , 图片的Base64编码 q ,UUID salt 和 应用密钥 按照 应用ID+q+salt+应用密钥的顺序拼接得到字符串 str 。2、对字符串 str 做 md5,得到32位大写的 sign (参考Java生成MD5示例,可点击右侧的JAVA示例)。输出结果返回的结果是json格式,具体说明如下:字段名字段说明orientation图片所对应的方向lanFromocr所识别出来认为的图片中的语言textAngle图片的倾斜角度errorCode错误码lanTo目标语言resRegions图片翻译的具体内容-boundingBox区域范围,四个值: 左上角的x值,左上角的y值,区域的的宽,区域的高 例如:134,0,1066,249-linesCount行数(用于前端排版)-lineheight行高-context该区域的原文-linespace行间距-tranContent翻译结果2、详细开发这个demo使用python3开发,包括maindow.py,transclass.py,pictranslate.py三个文件。maindow.py主要实现界面部分,使用python自带的tkinter库,来进行图片文件选择、选择结果存放路径。transclass.py实现了图片读取、处理等逻辑,最后通过pictranslate.py中的方法来调用图片翻译API。1、界面部分主要元素:123456789101112131415161718root=tk.Tk()root.title("netease youdao translation test")frm = tk.Frame(root)frm.grid(padx='50', pady='50')btn_get_file = tk.Button(frm, text='选择待翻译图片', command=get_files)btn_get_file.grid(row=0, column=0, ipadx='3', ipady='3', padx='10', pady='20')text1 = tk.Text(frm, width='40', height='10')text1.grid(row=0, column=1)btn_get_result_path=tk.Button(frm,text='选择翻译结果路径',command=set_result_path)btn_get_result_path.grid(row=1,column=0)text2=tk.Text(frm,width='40', height='2')text2.grid(row=1,column=1) btn_sure=tk.Button(frm,text="翻译",command=translate_files)btn_sure.grid(row=2,column=1) root.mainloop()获取待翻译图片文件的方法(此处设置的仅支持.jpg文件):123456789def get_files(): files = filedialog.askopenfilenames(filetypes=[('text files', '.jpg')]) translate.file_paths=files if files: for file in files: text1.insert(tk.END, file + '\n') text1.update() else: print('你没有选择任何文件')获取结果存储路径:1234def set_result_path(): result_path=filedialog.askdirectory() translate.result_root_path=result_path text2.insert(tk.END,result_path)翻译按钮,调用了translate_files,该文件中的translate_files()方法最终调用了translate类的translate_files()方法:123456def translate_files(): if translate.file_paths: translate.translate_files() tk.messagebox.showinfo("提示","搞定") else : tk.messagebox.showinfo("提示","无文件")2、批量图片处理transclass.py实现了图片读取、处理等逻辑,Translate类定义如下:12345678910111213141516171819class Translate(): def __init__(self,name,file_paths,result_root_path,trans_type): self.name=name self.file_paths=file_paths # 待翻译文件路径 self.result_root_path=result_root_path # 结果存放路径 self.trans_type=trans_type def translate_files(self): for file_path in self.file_paths: #对批量图片逐个处理 file_name=os.path.basename(file_path) print('==========='+file_path+'===========') trans_reult=self.translate_use_netease(file_path) #对单个图片调用接口 resul_file=open(self.result_root_path+'/result_'+file_name.split('.')[0]+'.txt','w').write(trans_reult) #返回结果写入 def translate_use_netease(self,file_content): #调用有道接口,并返回结果 result= connect(file_content) return result3、有道api调用pictranslate.py中封装了调用有道智云API的一些方法,其中最核心的是connect()方法,按照接口要求拼接了所需参数,发起请求并返回结果。12345678910111213141516171819202122232425262728def connect(file_content,fromLan,toLan): f = open(file_content, 'rb') # 二进制方式打开图文件 q = base64.b64encode(f.read()).decode('utf-8') # 读取文件内容,转换为base64编码 f.close() data = {} # data['from'] = '源语言' # data['to'] = '目标语言' data['from'] = 'auto' data['to'] = 'auto' data['type'] = '1' data['q'] = q salt = str(uuid.uuid1()) signStr = APP_KEY + q + salt + APP_SECRET sign = encrypt(signStr) data['appKey'] = APP_KEY data['salt'] = salt data['sign'] = sign response = do_request(data) result=json.loads(str(response.content, encoding="utf-8")) print(result) translateResults=result['resRegions'] print(translateResults) pictransresult="" for i in translateResults: pictransresult=pictransresult+i['tranContent']+"\n" return pictransresult总结又是一次愉快的开发体验,而且还是为数不多的求生成功体验 : P ,没想到借助开放平台的力量,图像识别,自然语言处理变得如此易如反掌,只要能正确发起请求,就能得到不错的翻译结果,剩下大把的时间用来和女朋友炫技,这感觉——爽!项目地址:https://github.com/LemonQH/BatchPicTranslate
-
涉及主要知识点:web是如何交互的requests库的get、post函数的应用response对象的相关函数,属性python文件的打开,保存代码中给出了注释,并且可以直接运行哦如何安装requests库(安装好python的朋友可以直接参考,没有的,建议先装一哈python环境)windows用户,Linux用户几乎一样:打开cmd输入以下命令即可,如果python的环境在C盘的目录,会提示权限不够,只需以管理员方式运行cmd窗口1pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requestsLinux用户类似(ubantu为例): 权限不够的话在命令前加入sudo即可1sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests1.爬取强大的BD页面,打印页面信息1234567891011# 第一个爬虫示例,爬取百度页面 import requests #导入爬虫的库,不然调用不了爬虫的函数 response = requests.get("http://www.baidu.com") #生成一个response对象 response.encoding = response.apparent_encoding #设置编码格式 print("状态码:"+ str( response.status_code ) ) #打印状态码 print(response.text)#输出爬取的信息2.常用方法之get方法实例,下面还有传参实例123456789# 第二个get方法实例 import requests #先导入爬虫的库,不然调用不了爬虫的函数 response = requests.get("http://httpbin.org/get") #get方法 print( response.status_code ) #状态码 print( response.text )3. 常用方法之post方法实例,下面还有传参实例123456789# 第三个 post方法实例 import requests #先导入爬虫的库,不然调用不了爬虫的函数 response = requests.post("http://httpbin.org/post") #post方法访问 print( response.status_code ) #状态码 print( response.text )4. put方法实例123456789# 第四个 put方法实例 import requests #先导入爬虫的库,不然调用不了爬虫的函数 response = requests.put("http://httpbin.org/put") # put方法访问 print( response.status_code ) #状态码 print( response.text )5.常用方法之get方法传参实例(1)如果需要传多个参数只需要用&符号连接即可如下123456789# 第五个 get传参方法实例 import requests #先导入爬虫的库,不然调用不了爬虫的函数 response = requests.get("http://httpbin.org/get?name=hezhi&age=20") # get传参 print( response.status_code ) #状态码 print( response.text )6.常用方法之get方法传参实例(2)params用字典可以传多个12345678910111213# 第六个 get传参方法实例 import requests #先导入爬虫的库,不然调用不了爬虫的函数 data = { "name":"hezhi", "age":20}response = requests.get( "http://httpbin.org/get" , params=data ) # get传参 print( response.status_code ) #状态码 print( response.text )7.常用方法之post方法传参实例(2) 和上一个有没有很像12345678910111213# 第七个 post传参方法实例 import requests #先导入爬虫的库,不然调用不了爬虫的函数 data = { "name":"hezhi", "age":20}response = requests.post( "http://httpbin.org/post" , params=data ) # post传参 print( response.status_code ) #状态码 print( response.text )8.关于绕过反爬机制,以zh爸爸为例123456789101112131415161718192021# 第好几个方法实例 import requests #先导入爬虫的库,不然调用不了爬虫的函数 response = requests.get( "http://www.zhihu.com") #第一次访问知乎,不设置头部信息 print( "第一次,不设头部信息,状态码:"+response.status_code )# 没写headers,不能正常爬取,状态码不是 200 #下面是可以正常爬取的区别,更改了User-Agent字段 headers = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36" }#设置头部信息,伪装浏览器 response = requests.get( "http://www.zhihu.com" , headers=headers ) #get方法访问,传入headers参数, print( response.status_code ) # 200!访问成功的状态码 print( response.text )9.爬取信息并保存到本地,因为目录关系,在D盘建立了一个叫做爬虫的文件夹,然后保存信息注意文件保存时的encoding设置1234567891011121314151617181920212223242526# 爬取一个html并保存 import requests url = "http://www.baidu.com" response = requests.get( url ) response.encoding = "utf-8" #设置接收编码格式 print("\nr的类型" + str( type(response) ) ) print("\n状态码是:" + str( response.status_code ) ) print("\n头部信息:" + str( response.headers ) ) print( "\n响应内容:" ) print( response.text ) #保存文件file = open("D:\\爬虫\\baidu.html","w",encoding="utf") #打开一个文件,w是文件不存在则新建一个文件,这里不用wb是因为不用保存成二进制 file.write( response.text ) file.close()10.爬取图片,保存到本地1234567891011#保存百度图片到本地 import requests #先导入爬虫的库,不然调用不了爬虫的函数 response = requests.get("https://www.baidu.com/img/baidu_jgylogo3.gif") #get方法的到图片响应 file = open("D:\\爬虫\\baidu_logo.gif","wb") #打开一个文件,wb表示以二进制格式打开一个文件只用于写入 file.write(response.content) #写入文件 file.close()#关闭操作,运行完毕后去你的目录看一眼有没有保存成功
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签