一日一技:使用Python翻译HTML中的文本字符串
相信大家都用过浏览器的翻译网页功能,例如对于下图这个英文网页:一键翻译成中文以后是这样的:你可能会觉得这个功能很简单,不就是字符串替换吗?那你可以试一试把下面这个HTML片段中的标签下面的英文翻译成中文。其它标签中的不要改动:123<div><p>if you want to parse date and time, your could use <em>datetimeem>, by use this library, you can generate now time by one line code <span>datetime.datetime.now()span> this is so easy.p>div>在标签中的dat..
更多一日一技:让你的正则表达式可读性提高一百倍
正则表达式这个东西,强大是强大,但写出来跟个表情符号一样。自己写的表达式,过一个月来看,自己都不记得是什么意思了。比如下面这个:1pattern = r"((?:\(\s*)?[A-Z]*H\d+[a-z]*(?:\s*\+\s*[A-Z]*H\d+[a-z]*)*(?:\s*[\):+])?)(.*?)(?=(?:\(\s*)?[A-Z]*H\d+[a-z]*(?:\s*\+\s*[A-Z]*H\d+[a-z]*)*(?:\s*[\):+])?(?![^\w\s])|$)"有没有什么办法提高正则表达式的可读性呢?我们知道,提高代码可读性的方法之一就是写注释,那么正则表达式能不能写注释呢?例如对于下面这个句子:1msg = '我叫青南,我的密码是:123kingname456,请注意保密。'我要提取其中的..
更多一日一技:Bug分析,假删除导致文章发布成功却打不开的问题
公司有一个内部博客,大家可以在上面创建自己的账号,然后写文章在全公司分享。昨天这个内部博客开通了API,因此我准备写一个Python程序,把自己公众号文章都搬运上去。然后我就发现这个API接口有一个bug。并且根据它的现象,猜到它问题出在哪里。我先来简单描述一下现象。假设我硬盘上现在有50个Markdown文件。现在我要把它发布到网站上。简化代码如下:1234567import globimport requestsfor path in glob.glob('blog/*.md'): with open(path) as f: article = f.read() requests.post('https://xxx.yyy.com/post?token=abcasdf', jso..
更多一日一技:如何让自己的工具函数在Python全局可用?
我们在开发Python项目的时候,经常会写一些工具函数。为了在项目里面多个.py文件中使用这个工具函数,就不得不在多个地方都导入它,非常麻烦。例如下面这个例子:在A.py和C.py文件都要使用clean_msg这个工具函数,那么他们就都要从util.py中导入clean_msg。这似乎理所当然。但今天我在看icecream/builtins.py源代码的时候,突然发现了一个高级用法,可以让我们使用工具函数的时候,就像使用Python的print函数一样,不用导入,而是直接使用。我们先来看看效果:大家注意A.py和C.py,我并没有导入clean_msg而是直接使用了这个函数。并且运行完全正常。关键原理就在入口文件main.py,被我框住的3行:1234import builtinsfrom util im..
更多OSI七层网络参考模型 随笔
简介开放式系统互联模型(英语:Open System Interconnection Model,缩写:OSI;简称为OSI模型)是一种概念模型,由国际标准化组织提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。定义于ISO/IEC 7498-1。该模型将通信系统中的数据流划分为七个层,从分布式应用程序数据的最高层表示到跨通信介质传输数据的物理实现。每个中间层为其上一层提供功能,其自身功能则由其下一层提供。功能的类别通过标准的通信协议在软件中实现。开放式系统互联模型的开发始于上世纪70年代后期,用以支持各种计算机联网方法的出现。在上世纪80年代,该模型成为国际标准化组织(ISO)开放系统互连小组的工作产品。作用承上启下,虚拟化上一层,向下一层提供服务。让每一层具有互连性、互操作性和应用的可移植性..
更多一种 IPv6 地址编码方案
又搞了一些骚操作:把一个 IPv6 地址压缩成一个短字符串。 背景 线上某张表有一个 VARCHAR 字段,用于存储 IP 地址。之前只存储 IPv4 地址,而 IPv4 地址的最大长度为 15(如 255.255.255.255),因此字段宽度只设置了 20。 当我们要存储 IPv6 地址时,却发现 IPv6 地址的最大长度是 39(如 1111:2222:3333:4444:5555:6666:7777:8888),而变更字段类型的尝试也以失败告终,因此我们需要找到一种方法来将 v6 IP 塞进长度为 20 的 VARCHAR 字段中。 一些简单的尝试 随便找一个 v6 IP,如 240e:17:ce8:fd00:52a8:6001:6e05:96f6,然后尝试将它缩短。 去掉冒号是否可行? ..
更多简单了解一下动态规划
动态规划是一种求最优解的方式,个人了解也不是很深,胡乱写写,算是一点点自己的理解,有不对的地方欢迎批评。动态规划是一种在多个状态间进行转移时,由上一个最优状态推导出下一个最优状态的方式,而上一个最优状态又是由上上个最优状态推导得到的,如此不断向前推进,最后我们只需要知道初始最优状态即可。通过初始最优状态和状态间转移的逻辑和方式,我们就能获得全局最优状态。(是不是感觉有点像数学归纳法?)举一个斐波拉契数列的例子,最简单的解法自然是使用递归实现123456def fab(n): if n == 0: return 0 if n == 1: return 1 return fab(n - 1) + fab(n - 2)简单分析就可以发现,以上例子中,很多的数字被重复..
更多CTF | 2022 CISCN 初赛 WriteUp
引言 第十五届全国大学生信息安全竞赛创新实践能力赛(CISCN 2022) - 线上初赛 http://www.ciscn.cn 比赛地址: 知识问答地址(5月28日10:00开放): https://knowledge.ichunqiu.com/2022dxs 场景实操地址(5月28日10:00开放): https://ctf.ichunqiu.com/2022dxs 又是一年一度的国赛,今年比赛时间从 24h 修改成了 10h,属实比去年 CTF 高考轻松了不少(呜呜 今年国赛也是一堆 ddl 的夹缝中度过,不过不是和 Asuri 一起打啦(润啦),今年就和现在的校队师傅们组了个 xdlddw 战队来摸鱼。 (嗯,熊大佬带带我 这篇大部分来自 xdlddw 战队的 writeup,喵喵..
更多一日一技:Any与TypeVar,让IDE的自动补全更好用
相信有很多同学在写Python的时候,会使用类型标注来提高代码的可读性,同时还能帮助IDE实现自动补全。假设我们现在获得了一个对象,这个对象可能是列表也可能是生成器,我写一个函数,获取它的第一个元素。代码很简单:123456789101112131415161718192021222324252627282930313233from typing import Iteratorfrom contextlib import suppressclass People: def __init__(self, name): self.name = name def eat(self): print(f'{self.name}正在吃饭') def walk(self):..
更多《从论文到代码,学术研究的工程化落地实践》直播录屏
PyCon China Python Meetup 2021 原计划2021年线下举行。由于疫情不可抗力,被延期到了今天线上举办。我今天分享的题目是《从论文到代码,学术研究的工程化落地实践》。介绍了Gne的起源——如何从一篇论文,发展到现在能够每天入库100万篇新闻的通用爬虫系统的故事。在分享中,我说明了学术研究与工程实践有哪些差异,在理论落地中,我们将会遇到哪些挑战。为什么有些领域,学术研究非常成熟了,但目前市面上还没有一家公司在这些领域落地成功。请大家点击观看。我的分享从04:41:47开始。
更多