跳到主要内容

16 篇博文 含有标签「Python」

查看所有标签

openpyxl性能优化实战小记

· 阅读需 3 分钟

最近做了个Excel文件处理小工具给一个项目使用,但是一个Excel文件要处理大概两分钟,我觉得这也太慢了,虽然电脑性能一般。因为就是读一个Excel文件,然后写一个Excel文件,也不涉及什么数据库、网络之类的,应该很快才对。 于是,我让AI去做性能优化,毕竟小工具的代码也是Vibe Coding出来的。起初我并没有太在意,不过,当我发现AI为了做性能优化开始修改openpyxl的源码,并且效果很显著时,我觉得有必要看一下了,学习一下。 学习了下本次的性能优化过程,整理了本次性能优化的改动点,然后就有了本篇文章。

用 cProfile 找热点​

import cProfile, pstats, io

pr = cProfile.Profile()
pr.enable()
# ... 业务代码 ...
pr.disable()

s = io.StringIO()
pstats.Stats(pr, stream=s).sort_stats("cumulative").print_stats(30)
print(s.getvalue())

Hexo博客同步至CSDN

· 阅读需 8 分钟

使用百度搜索,CSDN上的文章经常排在前面,可是,我并不喜欢在CSDN上写博客。而且,如果使用GitHub Pages搭建个人博客,由于GitHub屏蔽了百度的蜘蛛,百度会抓取失败,网站也就没有索引和流量了。虽然Google对于个人博客的收录比较快,也没那么麻烦,但国内使用百度搜索的还是比较多的。除了考虑不用GitHub Pages搭建,还可以考虑把文章同步到CSDN,使用CSDN来进行导流。

上网一查基本都是CSDN文章导出Markdown到Hexo,却没有Hexo博客同步到CSDN的,在GitHub上也没有找到相关的开源程序,无奈之下,只好自己搞一个了。本文就记录一下其中踩到的坑以及解决方案。

Markdown渲染​

在CSDN上创建Markdown文章时,会发送一个POST请求,有markdowncontent和content字段:前者是Markdown内容,在使用CSDN的Markdown编辑器时会使用这个字段;后者是渲染后的内容,在页面上显示博客会使用这个字段。这两个字段是独立的,也就是在页面上显示博客取决于content,和markdowncontent没有关系,反之亦然。

解决leetcode-publisher的代码中文乱码BUG

· 阅读需 2 分钟

在之前的 撸了个LeetCode题解仓库自动生成与发布的工具 中,我提到我撸了个LeetCode题解仓库自动生成与发布的工具。不过,这个工具有个遗憾:代码里的中文注释会显示为乱码。这个问题说小也小,但是,这样一来就不能写中文注释了,有时还是挺不方便的。

这个问题搁置了许久,今天终于想着把这一BUG给解决掉,顺便解决下其它的问题,像减少等待、优化页面等。这里说下代码里的中文乱码的BUG。

也许是为了安全吧,LeetCode在submission详情里将代码中的一些符号使用了其Unicode码进行转换。例如,\n会转为\\u000A,>会转为\\u003E等。

之前的处理方式很粗暴:

code = code.encode('utf-8').decode('unicode-escape')

撸了个LeetCode题解仓库自动生成与发布的工具

· 阅读需 3 分钟

前言​

看到有不少人在GitHub展示自己的LeetCode题解。其实我自己也在GitHub记录了自己的LeetCode题解,但是,从做题到整理,需要很多时间。本来刷题就需要时间,也够累的,还要整理,再写出来,一道题得花上好久。

最近在LeetCode上刷了上百道题目,当然,不少是Easy难度的。如果让我手动去整理,我觉得太费时间了。我一直贯彻一种理念,简单不麻烦的事容易坚持。于是,我就想着,是否能用程序来去做这些呢?

以前在刷题的时候没注意到右侧的Notes,后来偶尔注意到了,突发灵感,这个不正好可以用来写解题思路吗?于是,我就希望有个工具能整理我刷过的题目和我的解答,还有Notes。但是,找了一圈,没发现合适的,所以,干脆就自己花了大概一天半的时间撸了一个:leetcode-publisher

说一下这个工具和别的类似的工具的不同点吧。在GitHub上看到有人做过类似的工具,但是是基于headless的浏览器做的,我觉得这种方式不够优雅。其实LeetCode的请求构造并没有很麻烦,主要是csrftoken,在cookies里有,在请求头要传x-csrftoken和referer。另外,类似的LeetCode题解仓库其实放的主要是程序源代码,这并不是我想要的。因为Markdown格式可以很方便插入代码,而且,刷题的代码并不长,放在Markdown里,和题目与笔记一起,更为合适。