Pandas + Openpyxl process excel

更新

date update
2021-03-11 1. Initial

背景

最近帮同学写了一个数据处理的小程序,用python开发,用来处理excel数据。

其实excel本身就能实现大部分功能,并不一定要用程序处理,但用代码的话更灵活一些。

功能

数据本身不能share,但是计算逻辑应该无所谓,所以代码已经放在haredata

程序主要用到了python库pandas + openpyxl,写了非常简单的ui界面来选择输入的文件,处理完之后数据输出写入到新的文件里。

为了使用方便,最后打包成了exe。

Read more

Cut and Combine Tiktok Videos

更新

date update
2021-02-17 1. 修复了不同视频大小的压缩算法 2. 修改代码结构并支持并发预处理文件
2021-02-21 1. 调整代码结构,封装到类中
2. 优化对文件夹的批处理
3. 视频最后合成的分辨率由视频本身自动决定

背景

最近看到tiktok上有许多有意思的视频,所以想下载下来。但下过来的视频会有水印,主要是视频后3秒会有抖音的视频水印,很影响观感。

对于文字水印,需要用别的方式来下载,不太方便,后面可以再想办法。

现在的需求是:我在手机上下了n个视频,copy到电脑上之后,希望能去掉片尾的视频水印,并合并成一个大的视频。

Read more

Pandas Data Concat

背景

最近生成的报表比原来的逻辑多了些字段,想要老的报表也加上,所以用 python 写了脚本去处理,需要用来一些 mapping 的数据。pandas 有许多合并数据的方法,Concat 可以横向与纵向的合并,merge 可以实现横向的合并类似 sql 中的 join,append 则是纵向的合并。

Read more

Data Downloader

背景

有时候需要从数据库中把数据导出来查看,可以在编辑器中直接拷出来或者导出来。

又或者像 weekly/monthly 的数据,我偶尔导一次,不想再打开 sqldeveloper 去操作 Oracle,所以就写了类似下面的工具。

Read more

pyodbc unicode issue

这两天SRD这边有文件中存在乱码,导致那一行数据插入失败。

下面是我晚上在家里电脑重现的时候信息,所以是中文的:

1
pyodbc.Error: ('HY090', '[HY090] [Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度 (0) (SQLBindParameter)')

我一开始以为是这列数据的字符串长度过长,有1万多个字符,但是我用别的值试了一下,是没有问题的。

然后我尝试着使用print输出来看一下,竟然直接error了。
下面是例子:

1
2
3
text = "you are right \udef6 thanks"
print(text)
# UnicodeEncodeError: 'utf-8' codec can't encode character '\udef6' in position 14: surrogates not allowed
Read more

Text Similarity

背景

在工作中有需要从 comment 中提取所需要的值,是通过前缀来判断的,由于注释是人为输入的,所以很多时候会有一些拼写错误。
目前是通过写死前缀的字符串依次遍历来达到目的。

比如我们要的是 as of date mm/dd/yyyy,但也想要接受 as of data mm/dd/yyyy 那这样的话,就可以兼容许多拼写的错误。

字符串的相似性比较应用场合很多,像拼写纠错、文本去重、上下文相似性等。

评价字符串相似度最常见的办法就是:把一个字符串通过插入、删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种就是编辑距离(edit distance)度量方法,也称为Levenshtein 距离
海明距离是编辑距离的一种特殊情况,只计算等长情况下替换操作的编辑次数,只能应用于两个等长字符串间的距离度量。

其他常用的度量方法还有 Jaccard distance、J-W 距离(Jaro–Winkler distance)、余弦相似性(cosine similarity)、欧氏距离(Euclidean distance)等。

Read more

openpyxl with big data

背景

最近写了一个脚本,用 openpyxl 从 sql server 数据库中读取数据,使用 template 文件,将数据填充进去,生成最后的 daily report。

使用 openpyxl 来操作 excel,很方便,但发现当要写入大量数据的时候,时间非常慢,而且非常占内存。

最直接的原因是 openpyxl 会将读写过的 cell 都加载在内存中方便后面 update,不会释放这些 cell 而会一直驻留在内存中。

所以如果单纯写的话建议使用 xlrd,而且 pandas 有 to_csv/to_excel 这样的直接的方法。

但是因为我需要使用模板,在研究后发现 openpyxl 有 read_only/write_only 的模式,可以满足我的需求。
(一定要保证安装了 lxml 库,不然就算使用 write_only 模式,也一样会点用大量占存。)

Note:针对 office2007 以后的版本,xlsx 文件上限行数大约为 100 多万条的样子。

Read more

Compare csv file

背景

最近有个需求是对比 CSV 文件,其中一个为 Source, 另一个是系统生成的,理论上要满足 mapping 关系。

现在想要用 python 来验证一下生成的文件对应关系是正确的。

Read more

Compare data by pandas

背景

最近的项目会根据一些数据的值来得到一定的结果,用户原来使用 python 直接生成 excel 文件,我们相当于移植到数据库中,使用 SP 去做业务逻辑。

所以理论上最后的结果需要一致,之前没有做全部数据的对比,这次相关 features 由我在改动,所以无论如何还是要保证数据能对比上,所以就写了相关的脚本来处理。

Read more

Count data rows in excel

背景

今天手动给用户提供了 Report,其中需要对 excel 中的数据与数据库中的进行对比。数据文件不少,我要一个个打开去数,真的很费时间。

想要写一个小脚本,但发现没那么快,还是先手动给做了,写一个还是挺快的。

Read more