首页 文章 精选 留言 我的

精选列表

搜索[python],共10000篇文章
优秀的个人博客,低调大师

python数据解析模块之glom模块的使用(一)

glom模块的使用 简单说下glom模块主要是处理结构化数据用的,安装简单pip install glom即可,下面就glom的方法参数做例子讲解。 glom 和模块同名的glom方法使用方法: .glom(target, spec, **kwargs) target参数是结构化数据,一般是json嵌套类型。 spec参数是定义模板 **kwargs包含键值类型的参数:default,skip_exc,scope 我们来看个简单的例子、 target={'a':{'b':{'c':{'d':{'e':[1,2,3,4,5,6,7]}}}}} spec='a.b.c.d.e'output=glom(target,spec)print(output) #输出[1,2,3,4,5,6,7] 我们尝试下更多玩法: target={'a':{'b':{'c':{'d':{'e':[1,2,3,4,5,6,7]}}}}} spec={'aa':'a.b.c.d.e'}output=glom(target,spec)print(output) #输出{'aa':[1,2,3,4,5,6,7]} target2={'a':{'b':{'c':[{'d':[1,2,3,4]},{'d':[4,5,6,7]}]}}} spec2={'test':('a.b.c',['d'])} output2=glom(target2,spec2)print(output2) #输出{'test':[[1,2,3,4],[4,5,6,7]]} 再来一个官方的例子,综合运用一下: target={'system':{'planets':[{'name':'earth','moons':1}, {'name':'jupiter','moons':69}]}} spec={'names':('system.planets',['name']), 'moons':('system.planets',['moons'])} 输出:{'moons':[1,69],'names':['earth','jupiter']} 通过上面的一些例子可以看出,spec基础用法就是''里面依次写键名.键名.键名.键名, 另外需要注意的一点,如果列表里有字典取其值的话要求是键名必须相同就上面的'd'键。 . 可以看出glom和json的取得相比省去了很多的[].使用方便,另外spec的表达式还支持运用表达式比如lambda。 再来看一个运用参数比较全的例子 target={'a':[0,1,2]}#给定一个结构化数据spec={'a':('a',[lambdax:x/x])}#获取a的值里面元素的每个元素除以本身的值。output=glom(target,spec,default='666',skip_exc=ZeroDivisionError)print(output)#输出666 上面的结果主要演示的是spec的高级用法和第三个参数的用法。上面计算0/0的时候报错,错误类型ZeroDivisionError,所以我们让ZeroDivisionError跳过了错误,同时配合default给定一个错误时的默认值。 但是如果出现下面的情况怎么办呢? t={'a':{'b.c':{'c':{'d':{'e':[1,2,3,4,5,6,7]}}}}} s={'aa':'a.b.c.c'}print(glom(t,s)) 接下来让我们看Path方法 Path glom.Path(*path_parts) Path objects specify explicit paths when the default 'a.b.c'-style general access syntax won’t work or isn’t desirable. Use this to wrap ints, datetimes, and other valid keys, as well as strings with dots that shouldn’t be expanded,下面具体的看例子。 fromglomimportglom,Path target2={'a':{'b':{'c':[{'d':[1,2,3,4]},{'d':[4,5,6,7]}],'w':{'3.c':'e'}}}} output2_1=Path(glom(target2,Path('a','b','w','3.c')))print(output2_1)#输出e 然后我们回过头来看看上面使用spec的方式时出现的错误 t={'a':{'b.c':{'c':{'d':{'e':[1,2,3,4,5,6,7]}}}}}print(glom(t,{'aa':Path('a','b.c','c')})) #输出{'aa':{'d':{'e':[1,2,3,4,5,6,7]}}} 注意点: 1.path的路径的层次关系必须是紧挨着。比如上面我是直接Path('a','c')就会报错了。 2.path不能取类似下面这种的列表里的键需要配合glom处理。 Path('system','planets','name')或者Path('system','planets',['name'])都不行。 target={'system':{'planets':[{'name':'earth','moons':1}, {'name':'jupiter','moons':69}]}} Literal class glom.Literal(value)

优秀的个人博客,低调大师

python设计模式(二十三):访问者模式

访问者模式,数据结构中保存着许多元素,当改变一种对元素的处理方式但时,我们避免重复的修改数据类的结构,那我们在设计之初就将数据的处理分离,即数据类只提供一个数据处理的接口,而数据类的处理方法我们叫它访问者,那么相同结构的数据面临不同的处理结果时,我们只需要创建不同的访问者。 我们假设一种场景:上市公司的原始财务数据,对于会计来说需要制作各种报表,对于财务总监来说需要分析公司业绩,对于战略顾问来说需要分析行业变化,我们来实现这一过程。 classFinance: """财务数据结构类""" def__init__(self): self.salesvolume=None#销售额 self.cost=None#成本 self.history_salesvolume=None#历史销售额 self.history_cost=None#历史成本 defset_salesvolume(self,value): self.salesvolume=value defset_cost(self,value): self.cost=value defset_history_salesvolume(self,value): self.history_salesvolume=value defset_history_cost(self,value): self.history_cost=value defaccept(self,visitor): passclassFinance_year(Finance): """2018年财务数据类""" def__init__(self,year): Finance.__init__(self) self.work=[]#安排工作人员列表 self.year=year defadd_work(self,work): self.work.append(work) defaccept(self): forobjinself.work: obj.visit(self)classAccounting: """会计类""" def__init__(self): self.ID="会计" self.Duty="计算报表" defvisit(self,table): print('会计年度:{}'.format(table.year)) print("我的身份是:{}职责:{}".format(self.ID,self.Duty)) print('本年度纯利润:{}'.format(table.salesvolume-table.cost)) print('------------------')classAudit: """财务总监类""" def__init__(self): self.ID="财务总监" self.Duty="分析业绩" defvisit(self,table): print('会计总监年度:{}'.format(table.year)) print("我的身份是:{}职责:{}".format(self.ID,self.Duty)) iftable.salesvolume-table.cost>table.history_salesvolume-table.history_cost: msg="较同期上涨" else: msg="较同期下跌" print('本年度公司业绩:{}'.format(msg)) print('------------------')classAdviser: """战略顾问""" def__init__(self): self.ID="战略顾问" self.Duty="制定明年战略" defvisit(self,table): print('战略顾问年度:{}'.format(table.year)) print("我的身份是:{}职责:{}".format(self.ID,self.Duty)) iftable.salesvolume>table.history_salesvolume: msg="行业上行,扩大生产规模" else: msg="行业下行,减小生产规模" print('本年度公司业绩:{}'.format(msg)) print('------------------')classWork: """工作类""" def__init__(self): self.works=[]#需要处理的年度数据列表 defadd_work(self,obj): self.works.append(obj) defremove_work(self,obj): self.works.remove(obj) defvisit(self): forobjinself.works: obj.accept()if__name__=='__main__': work=Work()#计划安排财务、总监、顾问对2018年数据处理 #实例化2018年数据结构 finance_2018=Finance_year(2018) finance_2018.set_salesvolume(200) finance_2018.set_cost(100) finance_2018.set_history_salesvolume(180) finance_2018.set_history_cost(90) accounting=Accounting()#实例化会计 audit=Audit()#实例化总监 adviser=Adviser()#实例化顾问 finance_2018.add_work(accounting)#会计安排到2018分析日程中 finance_2018.add_work(audit)#总监安排到2018分析日程中 finance_2018.add_work(adviser)#顾问安排到2018分析日程中 work.add_work(finance_2018)#添加2018年财务工作安排 work.visit() 会计年度:2018 我的身份是:会计职责:计算报表 本年度纯利润:100 ------------------ 会计总监年度:2018 我的身份是:财务总监职责:分析业绩 本年度公司业绩:较同期上涨 ------------------ 战略顾问年度:2018 我的身份是:战略顾问职责:制定明年战略 本年度公司业绩:行业上行,扩大生产规模 ------------------ 上面年度可以实现:安排不同年份的财务报表给不同的角色分析,这就是访问者模式的魅力;访问者模式的核心是在保持原有数据结构的基础上,实现多种数据的处理方法,该方法的角色就是访问者。 访问者模式作为常用设计模式中难度最大的一种模式,他的难度在于高度的抽象,及其多层嵌套,需要细心的品味。

优秀的个人博客,低调大师

使用python计算与你投缘与无缘的生肖

三合 合是明合,光明正大地合,即是三个生肖的吉配。 申子辰三合,猴,鼠,龙,三合为一组死党;巳酉丑三合,蛇,鸡,牛,三合为一组死党;寅午戌三合,虎,马,狗,三合为一组死党亥卯未三合,猪,兔,羊,三合为一组死党。任何一组死党中的某一个人,皆会认为另两个成员是他的忘年之交。思维,价值观,习惯,动作等等总认为是那么情投意合。您有没有注意到,三合的地支各相差几岁答案是四岁或八岁本来俗话说:?!差4岁,8岁成婚才是天作之合,本来是依据这来的。 六合 总的来说,六合贵人对自个起着非常大的效果,或许在工作上给你强有力的扶持,或许在工作上给你及时的点拨,或许在财富上给你满足的协助,或许在生活上给你仔细的照顾,或许在人际联系上给你调和好各种敌对,或许在精神上给你交心的慰藉等等。 冥冥之中两人共处即是那么谐和调和,并且都很情愿为对方支付两人一同协作,将会打拼下

优秀的个人博客,低调大师

Python零基础学习笔记(四十)—— datetime和Calendar

import datetime import time ''' datetime比time高级了不少,可以理解为date time基于time进行了封装, 提供了各种实用的函数,date time模块的接口更为直观,更容易调用 模块中的类: datetime 同时有时间和日期 timedelta 主要用于计算时间跨度 tzinfo 时区相关 time 只关注时间 date 只关注日期 ''' #获取当前时间 d1 = datetime.datetime.now() print(d1) # d2 = datetime.datetime(1995, 4, 28,10,23,34,123355) print(d2) # d3 = datetime.datetime.time(d1) print(d3) #将时间转换为字符串 #d4 = d1.strptime("%Y-%m-%d %X") #print(d4) #时间加减 d5 = d1 - d2 print(d5) #间隔的天数 print(d5.days) #间隔天数除外的秒数 print(d5.seconds) import calendar ''' 日历 ''' #使用 print(calendar.month(2019, 7)) #返回指定年的日历 print(calendar.calendar(2019)) #判断闰年,返回True print(calendar.isleap(2000)) #返回某个月的weekday的第一天和这个月的天数 print(calendar.monthrange(2018, 12)) #返回某个月以每一周为元素的列表 print(calendar.monthcalendar(2017, 12))

优秀的个人博客,低调大师

Python零基础学习笔记(三十五)—— 内存修改

今天利用这个小功能做了个植物大战僵尸的外挂,哈哈哈 等以后学了GUI编程的时候做成图形化界面 #进程模块 import win32process #系统 import win32api import win32con import win32gui import ctypes #获取最高权限,\位运算 PROCESS_ALL_ACCESS = (0x000F000|0x00100000|0xFFF) #找窗体 win = win32gui.FindWindow("MainWindow","植物大战僵尸中文版") #根据窗体找到进程号 hid, pid = win32process.GetWindowThreadProcessId(win) #以最高权限打开进程 p = win32api.OpenProcess(PROCESS_ALL_ACCESS, False, pid) data = ctypes.c_long() #c语言中的长整形 #加载内核模块 md = ctypes.windll.LoadLibrary("C:\\Windows\\System32\\kernel32") #读取内存 md.ReadProcessMemory(int(p),0x12508678, ctypes.byref(data), 4, None) print("data =", data) #设置新值 newData = ctypes.c_long(1000) #修改 md.WriteProcessMemory(int(p), 0x12508678, ctypes.byref(newData), 4, None)

优秀的个人博客,低调大师

Python零基础学习笔记(三十一)—— 写文件

import time path = r"C:\Users\Administrator\PycharmProjects\untitled\day011\文件读写\file1" f = open(path,"w") ''' #写文件 #1、 f.write("Hello !!!") f.write("and") #2、刷新缓冲区 #直接把内部缓冲区数据立刻写入文件,而不是被动等待自动刷新缓冲区写入 f.flush() while True: f.write("Hello!\n") f.flush() time.sleep(1) f.close() #写文件 with open(path,"a") as f2: f2.write("aaa$$%##%##%") ''' #编码 with open(path, "wb") as f3: str = "My name is jjking.你好" f3.write(str.encode("utf-8")) with open(path, "rb") as f4: data = f4.read() print(data) print(type(data)) newData = data.decode("utf-8") print(newData) print(type(newData))

优秀的个人博客,低调大师

Python零基础学习笔记(二十四)—— 函数

''' 认识函数:在以恶完整的项目中,某些功能会反复的使用,那么 会将功能封装成函数,当我们要使用这些功能的时候 直接调用函数即可 本质:函数就是对功能的封装 优点: 1、简化代码结构,增加了代码的复用度(重复使用的程度) 2、如果想修改某些功能或修改某个bug只需要修改相应的函数即可 ''' ''' 定义函数: 格式: def 函数名(参数列表): 语句 return 表达式 def:函数代码块从def关键字开始 函数名:遵循标识符规则 参数列表(参数1, 参数2,……参数n):任何传入函数的参数和变量 必须放在圆括号之间 语句:执行的功能 return:以return为结束 ''' ''' 函数的调用 格式:函数名(参数列表) 函数名:是要使用的功能的函数 '''

优秀的个人博客,低调大师

Python零基础学习笔记(二十二)—— set

''' set:类似dict,是一组key的集合,不存储value 本质:无序和无重复元素的集合 用途:经常用于去除list和tuple中的重复元素 ''' #创建 #创建set 需要一个list或者tuple或者dict作为输入集合 #重复元素在set中会自动被过滤 set1 = set([1, 2, 2, 2, 3, 4, 5]) print(set1) set2 = set((1, 2, 3, 1, 2, 3)) print(set2) set3 = set({1:"2" , 3: "4", 5: "2"}) print(set3) #添加 注意;列表不能作为key,而set里面存的就是key,所以不能添加list[] set1.add(5) print(set1) set2.add((1,2,1,5)) print(set2) #set3.add({1,2}) #会报错 #插入整个list tuple 字符串,打碎插入 set1.update([12,3]) print(set1) set1.update((22,23,24,24)) print(set1) set1.update("name") print(set1) #删除 set1.remove("n") print(set1) set1.remove(2) print(set1) #遍历 for i in set1: print(i) #注意:set没有索引 for index, data in enumerate(set1): print(index,data) s1 = set([1, 2, 3]) s2 = set([2, 3, 4]) #交集 a1 = s1 & s2 print(a1) print(type(a1)) #并集 a2 = s1 | s2 print(a2) print(type(a2)) #list -> set l1 = [1, 2, 3, 4] set3 = set(l1) #tuple -> set t1 = (1, 2, 3) s4 =set(t1) print(s4) #去重 list5 =[1, 1, 2, 3, 4, 3, 4] print(list5) list6 = list(set(list5)) print(list6)

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册