当前位置: 首页 > 科技观察

又双叒叕得到了七个超级强大的Python库

时间:2023-03-21 12:27:36 科技观察

俗话说:“不必重新发明轮子”。最好的例子是Python库。它可以帮助您以简单的方式编写复杂且耗时的函数。据我所知,一个好的项目会使用一些最好的库。1.PySnooper我们正在编写一个通过返回位列表将数字转换为二进制的函数。@pysnooper.snoop()可以通过添加装饰器进行调查:importpysnooper@pysnooper.snoop()defnumber_to_bits(number):ifnumber:bits=[]whilenumber:number,remainder=divmod(number,2)bits。insert(0,remainder)returnbitselse:return[0]number_to_bits(6)或者,如果你不想跟踪整个函数,你可以将相关部分包装在with块中:importpysnooperimportrandomdeffoo():lst=[]foriinrange(10):lst.append(random.randrange(1,1000))withpysnooper.snoop():lower=min(lst)upper=max(lst)mid=(lower+upper)/2print(lower,mid,upper)foo()输出如下:Newvar:......i=9Newvar:......lst=[681,267,74,832,284,678,...]09:37:35.881721line10lower=min(lst)Newvar:......lower=7409:37:35.882137line11upper=max(lst)新变量:.......上=83209:37:35.882304行12中=(下+上)/274453.0832新变量:.....中=453.009:37:35.882486行13print(lower,mid,upper)Elapsedtime:00:00:00.000344作为开发人员,大部分时间都花在了调试上。这个库是一个调试器。大多数人会在重要的地方使用打印行,其中一些会显示变量的值。这个库做同样的事情,除了不是制作正确的打印行,你只需在你感兴趣的函数上添加一个行装饰器。你会得到一个函数的逐字日志,包括哪些行在何时运行,以及何时在本地运行变量被改变了。它在GitHub上拥有超过15,000颗星。项目地址:https://github.com/cool-RR/PySnooper2.schedulePythonjobschedulingforhumans。使用友好的语法定期运行Python函数(或任何其他可调用函数)。一个简单易用的API,用于安排作业,专为人类设计。用于重复作业的进程内调度程序。不需要额外的过程!非常轻巧,没有外部依赖。出色的测试覆盖率。可在Python和3.6、3.7、3.8、3.9上测试minutes.do(job)schedule.every().hour.do(job)schedule.every().day.at("10:30").do(job)schedule.every(5).to(10).minutes.do(job)schedule.every().monday.do(job)schedule.every().wednesday.at("13:15").do(job)schedule.every().day。at("12:42","Europe/Amsterdam").do(job)schedule.every().minute.at(":17").do(job)defjob_with_argument(name):print(f"Iam{name}")schedule.every(10).seconds.do(job_with_argument,name="Peter")whileTrue:schedule.run_pending()time.sleep(1)这是一个用于人类的Python作业调度库。它允许您使用友好的语法定期运行Python函数(或任何其他可调用函数)。它包括许多功能,例如周期性工作的进程内调度程序(不需要额外的进程)、非常轻量级、没有外部依赖性、具有良好的测试覆盖率等等。这个库在GitHub上有超过10k星。项目地址:https://github.com/dbader/schedule3。MechanicalSoup"""使用MechanicalSoup从Qwantsearch引擎获取结果的示例。"""importreimportmechanicalsoupimporthtmlimporturllib.parse#连接到Qwantbrowser=mechanicalsoup.StatefulBrowser(user_agent='MechanicalSoup')browser.open("https://lite.qwant.com/")#填写搜索表单browser.select_form('#search-form')browser["q"]="MechanicalSoup"browser.submit_selected()#在浏览器中显示链接结果。page.select('.resulta'):#Qwant显示重定向链接,而不是实际URL,因此从重定向链接中提取#实际URL:href=link.attrs['href']m=re.match(r"^/redirect/[^/]*/(.*)$",href)如果m:href=urllib.parse.unquote(m.group(1))print(link.text,'->',href)该库将帮助您自动化与网站的交互。它会自动存储和发送cookie,遵循重定向,并且可以遵循链接和提交表单。它不执行Javascript。这个库在GitHub上有超过4k星。项目地址:https://github.com/MechanicalSoup/MechanicalSoup4。ftfy>>>fromftfyimportfix_encoding>>>print(fix_encoding("(à??'a?£')à??"))(?'?')?它能做什么这里有一些例子(在现实世界)ftfy可以做什么:ftfy可以通过检测明显是UTF-8但被解码为其他字符的模式来修复mojibake(编码混乱):>>>importftfy>>>ftfy.fix_text('a?”没问题')'?没问题'这听起来不可能吗?真的不是。UTF-8是经过精心设计的,用起来就会很明显,而一个mojibake的字符串通常包含了我们还原原始字符串所需要的所有信息。ftfy可以一次修复多层mojibake:>>>ftfy.fix_text('蒙娜丽莎没有眉毛。')"蒙娜丽莎没有眉毛”它修复了带有上面应用的“大引号”的mojibakes,在引号被扩展之前无法一致地解码:>>>ftfy.fix_text("l'humanité")"l'humanité"ftfy可以修复包含U+A0的字符(不中断空间),但U+A0变为ASCII空间,然后与另一个空间组合:>>>ftfy.fix_text('?\xa0perturberlaréflexion')'àperturberlaréflexion'>>>ftfy。fix_text('?perturberlaréflexion')'àperturberlaréflexion'ftfy还可以解码出现在HTML之外的HTML实体,即使这些实体没有正确大写:>>>#按照HTML5标准,只有'PéREZ'是可以接受的>>>ftfy.fix_text('PÉREZ')'PéREZ'这些修复并非在所有情况下都有效,因为ftfy有一个坚定的目标,即避免误报-它永远不应该将正确解码的文本更改为其他内容.以下文本可以在Windows-1252中编码并在UTF-8中解码,并将解码为“MARQU?”。但原文清楚,故不改。>>>ftfy.fix_text('ILYMARQUé…')'ILYMARQUé…'这个库将帮助您修复以各种方式损坏的Unicode。该库的目标是采用错误的Unicode并输出良好的Unicode以用于您的Unicode识别代码。它在GitHub上拥有超过3k颗星。项目地址:https://github.com/rspeer/python-ftfy5。rpyc这是一个用于对称远程过程调用、集群和分布式计算的透明python库。它利用对象代理技术和python的动态特性,克服了进程与计算机之间的物理边界,使远程对象可以像本地一样操作。这个库在GitHub上有超过1k星。项目地址:https://github.com/tomerfiliba-org/rpyc6。pygletpyglet的一些特性是:没有外部依赖项或安装要求。对于大多数应用程序和游戏需求,pyglet只需要Python,简化了分发和安装。使用像PyInstaller这样的freezers可以轻松打包你的项目。利用多窗口和多显示器桌面。pyglet允许您使用多个平台原生窗口,并且完全了解全屏游戏的多显示器设置。加载几乎任何格式的图像、声音、音乐和视频。pyglet可以选择使用FFmpeg播放MP3、OGG/Vorbis和WMA等音频格式,以及MPEG2、H.264、H.265、WMV和Xvid等视频格式。没有FFmpeg,pyglet包括对wav、png、bmp等标准格式的内置支持。pyglet完全用纯Python编写,并利用ctypes模块与系统库交互。您可以修改代码库或贡献代码,而无需任何第二语言编译步骤或编译器设置。尽管是纯Python,但pyglet具有出色的性能,这要归功于用于绘制数千个对象的高级批处理。pyglet是在BSD开源许可下提供的,允许您在商业和其他开源项目中使用它而几乎没有限制。importpygletwindow=pyglet.window.Window()label=pyglet.text.Label('Hello,world!',font_size=36,x=window.width//2,y=window.height//2,anchor_x='center',anchor_y='center')@window.eventdefon_draw():window.clear()label.draw()pyglet.app.run()这是一个跨平台的Python窗口和多媒体库,用于开发游戏和其他视觉丰富的应用程序。它支持窗口、用户界面事件处理、操纵杆、OpenGL图形、加载图像和视频以及播放声音和音乐。它可以在Windows、OSX和Linux上运行。它在GitHub上有超过1k颗星。项目地址:https://github.com/pyglet/pyglet7。ropeimportrope.base.projectmyproject=rope.base.project.Project('/path/to/myproject')这个库提供了强大而安全的重构。它包括轻依赖性等功能,不像PyRight或PyLance那样依赖于Node.js,完全用Python编写,等等。它在GitHub上有超过1k颗星。项目地址:https://github.com/python-rope/rope文档地址:https://rope.readthedocs.io/en/latest/overview.html