使用openpyxl批量提取Excel单元格内容
背景今天晚上收到了朋友发的微信,他手里有一份医院提供的PDF版员工体检报告,每个员工一页表格,一共700多页。他的主管要求他把PDF中的每位员工的姓名、身份证号、部门、体检结果汇总成一个excel表格。
我粗略的看了一下PDF文件,每一页都是一个固定的表格,且PDF中是嵌入的文字而非栅格化后的图片。或许操作起来还是很简单的。
折腾处理PDFPDF这种让你好看好打印的文件格式,虽然可能用ReportLab模块也能处理,但是我也就用过它生成PDF。总体考虑下来,还是转成我稍微熟悉点的Excel再处理吧。
PDF转Excel这一部分我用的是PDF-XChange Editor。当然,可能有其他免费或者合乎隐私要求的工具,但我电脑上目前也只有这个。
为了后续更方便的处理,在转换时,设置了“整个文档输出为一个工作表”和“将每段设置为工作表的一行”。
处理Excel打开转换后的Excel表,发现第一个姓名在C3和C4这个合并单元格中,第二个姓名出现在了C23和C24这个合并单元格中。那么显然,后续只要沿着这个公差20的等差数列找下去就可以了
以此类推,找到了所有需要的信息。
下面使用openpyx ...
在路由器上解决电视盒子获取不到网络时间的问题
1.开启OpenWRT的NTP服务器在系统>系统>时间同步中勾选作为NTP服务器提供服务
2.转发局域网内的NTP请求到路由器因为NTP使用的是UDP 123端口
可以新建一个转发,在网络>防火墙>端口转发
配置名称
值
协议
UDP
源区域
LAN
外部端口
123
目标区域
LAN
内部IP地址
<路由器IP>
内部端口
123
也可以试试ChatGPT给出的iptables规则
1iptables -t nat -A PREROUTING -p udp --dport 123 -j REDIRECT --to-ports 123
3.测试Windows上可以使用下面的命令测试NTP服务器是否可用
1w32tm /stripchart /computer:<NTP服务器地址>
如果端口转发成功的话,任意地址都能获得NTP时间,如
1w32tm /stripchart /computer:a.b.c
4.碎碎念又快到新年了,一直当作摆设的电视终于又要用上几天了。自从电视家没了之后,看电视也变得更麻 ...
使用SVP+MPC-HC在播放视频时补帧
配置SVP安装项目在 选择组件 界面,选项以下内容
12345[DS_64] Core for DirectShow 64-bit[DS_32][DS_64][VPS_64] AviSynth Filter (AVSF)[DS_32][DS_64] MPC Video Renderer[DS_64] MPC-HC 64-bit(选装)[DS_32][DS_64] madVR video renderer(选装)
安装MPC-HC如果在上一步已经让SVP安装了MPC-HC,可以跳过这一部分
可以使用 scoop 安装位于 extras Bucket的 mpc-hc-fork
1scoop install mpc-hc-fork
配置MPC-HC
在 MPC-HC 顶部菜单中选择 查看 > 选项.
在 内部滤镜 右侧选项的 视频解码器 中,把 Hardware Decoder to use 改为 DXVA2 (copy-back).
在 内部滤镜 > 扩展滤镜 中添加 AviSynth Filter,并将优先级设置为 首选.
双击 AviSynth Filter,勾选 Enab ...
快速生成GPG密钥
生成主密钥1gpg --expert --full-gen-key
选择 (11) ECC (set your own capabilities) 和 (S) Toggle the sign capability ,让主密钥仅有签名功能
生成三个子密钥获取主密钥指纹gpg --fingerprint --keyid-format long -K
使用quick-add-key参数快速添加子密钥123gpg --quick-add-key <fingerprint> cv25519 encrgpg --quick-add-key <fingerprint> ed25519 authgpg --quick-add-key <fingerprint> ed25519 sign
如需设定密钥有效期,可在命令行最后加入时间,去1y
备份密钥导出公钥1gpg -ao public-key.pub --export <key id>
导出私钥1234gpg -ao sec-key.asc --export-secret-key <key id&g ...
记录使用rime和雾凇拼音
几年前在使用Linux Mint的时候,就在考虑有没有可以跟Windows端同步用户数据的输入法,于是就安装了rime,并使用了🍀四叶草拼音输入方案。当时实在是不像研究rime的配置文件,所以总是有一些时不时会出现的问题。后面在Windows上就一直用着系统自带的输入法了。
最近打字,越来越觉得Windows自带输入法的各种问题。自组词有时候用好几遍也记不住。而且并不会随Microsoft账号同步。正巧最近搜到了雾凇拼音 | 长期维护的简体词库 。所以决定一次性把所有桌面设备的输入法换成rime。
安装rime和雾凇拼音
从rime 官网下载后一路默认值,此时的用户文件夹在%APPDATA%\rime
从雾凇拼音 仓库打包下载整个仓库,把所有文件放在%APPDATA%\rime
一些自定义设置同步打开%APPDATA%\rime\installation.yaml添加下面两行,注意引号种类
12installation_id: "office"sync_dir: 'D:\OneDrive\rime\'
其中installation_id用于区 ...
使用XLWings连接Excel和Python(一)
有Excel了还用什么数据库(
很久很久没有写东西了,虽然也一知半解地了解了一些新东西,但总觉得不好记录下来,一堆代码躺在Private仓库里. 现在就趁着暑假整理一下吧.最开始接触xlwings也是因为实际的需要,每次核酸检测之后导出的表格是一个包含各种信息的excel表格. 而每天要做的是删掉不需要的列、筛选出符合条件的数据、把成年人和未成年人从表格里分开、统计人数、做出没做核酸的人员名单.这种每天重复的工作自然很适合让程序去做,脑海里就浮现出了在各大社交媒体都刷过的广告:学Python——几秒做完其他人几天的工作——升职加薪(雾).不过Python万物皆可import,去网上随便一搜都能找到很多可以读写excel的包,这里面xlwings功能最多,且支持xls和xlsx,自然想试试这个了.
一些常用的GPG命令
生成密钥
1gpg --expert --full-gen-key
导出公钥
1gpg -o public.pgp -a --export <email>
这里的 -o 等同于 --output 即 输出文件名.
导出私钥
1gpg -o private.pgp -a --export-secret-key <email>
导入
1gpg --import public.pgp
加密
1gpg -e -r <username> <filename>
这里的 -r 等同于 --recipient 即 收件人ID.
解密
1gpg -d filename.gpg
签名
1gpg -s -ab <filename>
这里的 -a 等同于 --armor 即 把内容转化为ascii编码.这里的 -b 等同于 --detach-sig 即分离签名.
验证
1gpg --verify <filename>.asc <filename>
信任
1gpg --edit-key <email> ...
在openwrt上以服务运行进程
创建放置程序和配置文件的文件夹1234mkdir /etc/config/abandoncd /etc/config/abandon# 上传相关文件到该目录chmod +x abandon
创建服务1234567891011121314151617cat << EOF > /etc/config/abandon/abandon.service#!/bin/sh /etc/rc.common# "new(er)" style init script# Look at /lib/functions/service.sh on a running system for explanations of what other SERVICE_# options you can use, and when you might want them.START=80SERVICE_DAEMONIZE=1start() { service_start /etc/config/abandon/abandon /etc/config/abandon/con ...
从GitLab迁移到CloudFlare Pages
CloudFlare Pages いいです!
Excel使用记录 2
MID 函数说明MID 返回文本字符串中从指定位置开始的特定数目的字符,该数目由用户指定.
语法1=MID(text, start_num, num_chars)
参数
说明
text
包含要提取字符的文本字符串
start_num
文本中要提取的第一个字符的位置
num_chars
从文本中返回字符的个数
例
公式
说明
结果
=MID(A2,1,5)
从 A2 内字符串中第 1 个字符开始,返回 5 个字符
MOD 函数说明模除运算,结果正负与与除数相同.
语法1=MOD(number, divisor)
参数
说明
Number
被除数
Divisor
除数
例
公式
说明
结果
=MOD(3, 2)
3/2 的余数
1
=MOD(-3, 2)
-3/2 的余数
1
=MOD(-3, -2)
-3/-2 的余数
-1
DATEDIF说明计算两个日期之间相隔的天数、月数或年数.
语法1=DATEDIF(start_date,end ...