Category Archives

23 Articles

Python float和decimal

2   1919 转为繁体

在Windows上打包Python脚本时遇到一个需求,将浮点数转成字符数组,比如输入1.001,得到[‘1′,’0′,’0′,’1’]

一开始想当然地用了:

version = 2.001

v = list(str(int(version * 1000)))

发现好像哪里不对,得到的v是[‘1’, ‘0’, ‘0’, ‘0’]。想了一想应该是浮点数的精度问题,因为一看version * 1000 = 1000.9999999999999

所以有这么几种解决方法:

v = list(str(int(round(version * 1000))))

或者:

v = list(str(version).replace(“,”, “”) + “000”)[:4]

或者用decimal模块,decimal是固定小数点位数的,用的是十进制乘除法,所以(在设定的位数内)不会产生误差:

from decimal import getcontext, Decimal

getcontext().prec = 4

v = list(str(Decimal(version) * 1000))

需要注意的是decimal会自动转换科学计数法,可以用”%d” % Decimal(d)来得到原始值。

 

Python中热补丁(Hot Patching)的实现和一些问题

2   3302 转为繁体

有时候我们可能需要只修改一部分代码而且要求修改立即生效,或者为了高可用性不允许停止服务程序,这时我们就需要热补丁

在debian,red hat等系统(或者vista之后的windows)的软件更新时,通常使用替换符号链接来达到高可用性。

对Python来说,解释器预先处理了脚本生成字节码,并读入内存;所以之后硬盘上的文件发生了什么变化,就只能想办法命令解释器重新读入新的脚本。实现这个功能的内建命令是reload

Read More

迅雷快鸟(diǎo)路由器版

531   100321 转为繁体

可以在路由器或者同一网络下的任意设备上登陆并心跳,这样就不用开电脑也不用在手机里装奇怪的应用了。

对我有洁癖你来打我呀

436919cbgw1erq704m1h4g205k049nfa有问题请留言。如果你要报告一个问题,请同时注明:

  • 所使用的版本 (Python/Shell)
  • 运行的系统环境及版本 (操作系统,Python版本等)
  • 包含错误信息的日志
  • 产生错误的操作步骤
  • (可选) 运营商所在地,如:上海电信

Read More

在某网站中使用的字幕文件名猜测视频文件名的算法

2   65369 转为繁体

觉得有点意思,拿出来和大家一起研究下,欢迎提供更好的建议。

因为爬x手的时候,网页已经没了,只能自食其力;用unrar(rarlab上下的,apt-get里的太古老)获得rar内的文件名,用zipfile模块列zip包的,抓的时候直接把返回的内容插到数据库了,没分析,因为没那么多时间去想算法,还是先把dirty data撸下来再说。

然后开始正文了www

按照这么一个基本思想,字幕文件名除了扩展名以外,其余部分和视频文件是一样的。如果压缩包里面只有一个文件,那么直接就是它去掉扩展名就好了;但是如果有多个版本的字幕(比如eng,GB,BIG5等),那就需要一个字符串最大匹配的算法。←为了装B取的名字
Read More