2016-06-08

python時間函數(time)

22:52 Posted by ZMH 2 comments
電腦時間參考標準:
1970/1/1 00:00:00(又稱為epoch)

time.time()
返回自epoch到現在的時間(秒)
time.timzone
存著時區的offset值(Asia<0;UK=0;US>0)
==========================================
time.gmtime([secs])
將自epoch到現在的時間轉換成結構化的"GMT"時間
沒有傳入參數,即是傳入當前時間

calendar.timegm(tuple)
time.gmtime的相反函數,傳入結構化的GMT時間
返回從epoch到傳入的時間(秒)
==========================================
time.localtime([secs])
將自epoch到現在的時間轉換成結構化的"當地"時間
沒有傳入參數,即是傳入當前時間

time.mktime(t)
time.localtime的相反函數,傳入結構化的當地時間
返回從epoch到傳入的時間(秒)
==========================================
time.strftime(format[, t])
將結構化時間格式化成想要的格式

time.clock()
顯示程序開始執行後的經過時間(秒)

python3.3後:
time.clock()已不被建議
改建議使用:
time.perf_counter()
傳回程序執行的時間(包含程序等待的時間)
因為時間參考原點未定,需要使用兩次的差值!
time.process_time()
傳回程序使用的CPU運算時間(不包含程序等待的時間)
因為時間參考原點未定,需要使用兩次的差值!
==========================================
待補上計時程式..

補充:
UTC時間和GMT時間的差異:
http://pansci.asia/archives/84978

2016-05-27

快速啟動python venv環境和flask server

04:41 Posted by ZMH 2 comments
用python內建的venv來創建虛擬環境
但要啟動此虛擬環境需要執行:
venv/Scripts/activate.bat

啟動方法有兩種:

  1. 開啟一個 cmd 視窗去執行"你的批次檔"
    (第一種方法有點麻煩)
  2. 建立捷徑, 捷徑內容為 cmd /k "你的批次檔"
    (第二種利用捷徑方便許多)

補充:


  • CMD [charset] [options] [/C Command]
    /C     Run Command and then terminate
    /K     Run Command and then return to the CMD prompt.
    /Q    Turn echo off
  • cd /d drive:\directory
    (可以同時改變drive和directory)

如果捷徑要執行其它指令(啟動flask server為例)

(用"&"或"&&"來分隔指令)
cmd /k "你的批次檔 & cd /d drive:\directory & python hello.py runserver"

2016-03-13

[Python Basic Syntax] Assert 指令

05:39 Posted by ZMH , No comments

Assert 指令

assert可以引發exception,只是其為引發AssertionError

assert 一串指令
其背後運作原理如下:
if __debug__:
    if not 一串指令:
        raise AssertionError

assert 一串指令, 一串指令(2)
其背後運作原理如下:
if __debug__:
    if not 一串指令:
        raise AssertionError(一串指令(2))

在平時python直譯器啟動時__debug__會被設成True而執行assert內部code
但如果加上參數"-O" 即會將__debug__設成False,導致不執行assert
如此的功能可以用於單元測試,確保一些變數按照我們的要求走,不然就會導致引起AssertionError

2016-03-12

SAS 學習筆記

03:03 Posted by ZMH No comments
介面

基本程式碼

  • 格式:
    • 沒有大小分別
    • 每行程式碼要加上分號";"結尾
    • 註解: /*註解~~~*/
  • 內容:
    • 程式主要由兩個單元組成: DATA、PROC
    • 每個單元都以"RUN;"結尾
    • DATA單元可以處裡輸入輸出和資料的處理
    • PROC類似調用SAS內建的函數來處理相對應的資料
      那麼這個有問題步驟就可能被停止執行,而SAS會緊接著處理下一個步驟,這時候得到的結果可能就會有問題,所以請養成執行程式後先至LOG視窗觀看有無錯誤。
  • 建立資料庫:
    SAS的資料都是儲存成資料庫格式,分為兩種方式:
    • 暫時資料庫(程式關閉資料即刪除)
    • 永久資料庫(利用LIBNAME指定放置於電腦中的位置)
  • 輸入資料
    • INPUT column1 $ column2(以空格為分界讀資料,$表示column1變數是字串形式)
    • INPUT column 1-5 column $6-7 (這種讀取方式可以指定讀入的字元位置)

2016-01-27

Python打包成執行檔(Python 3.5 | PyInstaller 3.1)

06:52 Posted by ZMH , 6 comments

Python 3.5 嘗試 PyInstaller 3.1

Introduction

Python是個很方便的語言,但是當你需要將程式分享給他人使用時,這種script language需要安裝相對應的直譯器和環境,大幅降低檔案分享的容易程度,因此我們能藉由一些第三方軟體來將python的程式碼打包成Windows、Linux或Mac可以執行的執行檔(ex: exe..)

目前我知道能打包python的工具有py2exe、pyinstaller、cx-freeze

雖然py2exe很小巧方便,但似乎不支援python3.5
所以本篇嘗試使用 pyinstaller!

安裝(在command line下指令)

安裝指令(若不清楚pip可看這篇)
pip install pyinstaller
或是更新
pip install --upgrade pyinstaller

使用方式

這套件功能很強大,官方檔案
pyinstaller [options] script [script ...] | specfile
不加任何參數,即可將檔案打包成一個資料夾(包含執行檔+引入的函式庫)
pyinstaller myscript.py
若要將整個資料夾打包成一個執行檔
pyinstaller -F myscript.py
其他功能未來介紹,或請參閱官方檔案

問題

  1. 若產生"failed to create process."
    目前推測可能有些bug導致無法解析含空格的檔案路徑(EX:預設的Python 3.5即有空格),因此可以選擇把python裝在沒有含空格的路徑,重新install所以相關檔案。
    或是:
    cd /path.../python 3.5/Scripts
    python pyinstaller-script.py path/YourScript.py

在網頁裡放程式碼(SyntaxHighlighter)

前言:

這篇教學利用SyntaxHighlighter使得網頁能呈現經過處理的程式碼(易於閱讀)。內容主要來自官方說明文件

基本步驟:

  1. 在網頁內引入 shCore.jsshThemeDefault.css和 shCore.css
  2. 加入你所寫程式對應的"brushes",這裡有所有的brushes
    (舉例, shBrushJScript.js 用於 JavaScript)
  3. 有兩種方式: <pre /> 或 <script /> (請見下面範例)
  4. 呼叫 SyntaxHighlighter.all() JavaScript 語法即生成

範例:

  1. 在網頁<head>與</head>之間引入:
    
    
    
    
    
     
    
    
  2. 在<pre> </pre>之間打入想要的程式,並指定class="brush: js"(這邊用javascript舉例)
        /**
         * SyntaxHighlighter
         */
        function foo()
        {
            if (counter <= 10)
                return;
            // it works!
        }
    

<pre /> 或 <script />差異:

...建構中