Category Archives

23 Articles

Python float和decimal

2   1496 轉為簡體

在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   2448 轉為簡體

有時候我們可能需要只修改一部分代碼而且要求修改立即生效,或者為了高可用性不允許停止服務程序,這時我們就需要熱補丁

在debian,red hat等系統(或者vista之後的windows)的軟件更新時,通常使用替換符號鏈接來達到高可用性。

對Python來說,解釋器預先處理了腳本生成字節碼,並讀入內存;所以之後硬盤上的文件發生了什麼變化,就只能想辦法命令解釋器重新讀入新的腳本。實現這個功能的內建命令是reload

Read More

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

470   92776 轉為簡體

可以在路由器或者同一網絡下的任意設備上登陸並心跳,這樣就不用開電腦也不用在手機里裝奇怪的應用了。

對我有潔癖你來打我呀

436919cbgw1erq704m1h4g205k049nfa有問題請留言。如果你要報告一個問題,請同時註明:

  • 所使用的版本 (Python/Shell)
  • 運行的系統環境及版本 (操作系統,Python版本等)
  • 包含錯誤信息的日誌
  • 產生錯誤的操作步驟
  • (可選) 運營商所在地,如:上海電信

Read More

在某網站中使用的字幕文件名猜測視頻文件名的算法

2   64933 轉為簡體

覺得有點意思,拿出來和大家一起研究下,歡迎提供更好的建議。

因為爬x手的時候,網頁已經沒了,只能自食其力;用unrar(rarlab上下的,apt-get里的太古老)獲得rar內的文件名,用zipfile模塊列zip包的,抓的時候直接把返回的內容插到數據庫了,沒分析,因為沒那麼多時間去想算法,還是先把dirty data擼下來再說。

然後開始正文了www

按照這麼一個基本思想,字幕文件名除了擴展名以外,其餘部分和視頻文件是一樣的。如果壓縮包裡面只有一個文件,那麼直接就是它去掉擴展名就好了;但是如果有多個版本的字幕(比如eng,GB,BIG5等),那就需要一個字符串最大匹配的算法。←為了裝B取的名字
Read More