bloggerads

2017年10月3日 星期二

Python : struct

這篇說明 Python 要如何像C/C++一樣,將struct資料以binary的形式寫入檔案。
參考以下範例:

#! python2
""" Author: Martin Lee """
import struct
with open('out.bin','wb') as f:
    f.write(struct.pack('B8sHHL', 22, 'Hi World', 1, 2, 0x3322))

fin = open("out.bin", "rb")
i = struct.unpack('B8sHHL', fin.read())
fin.close()

2017年9月17日 星期日

Python : 使用 py2exe 打包 py檔成執行檔

Windows下將py檔打包成執行檔, 以python 2.7為範例

基本上是參考 http://www.py2exe.org/index.cgi/Tutorial

試過import 第三方模組、內建的GUI 模組(Tkinter)、自定義的模組, py2exe 都能打包。以下是流程:

1.安裝 py2exe

2.在要打包的py檔目錄下,新增一個'setup.py'檔,其內容為
  • from distutils.core import setup
  • import py2exe
  • setup(console=['要打包的檔名.py'])
3.python setup.py py2exe

4.會在同目錄下產生兩個資料夾,其一個新增的資料夾'dist'內會產生一個同檔名的exe檔

Linux下將py檔打包成執行檔, 以python 2.7為範例

1. 安裝 pyinstaller (pip install pyinstaller)
2. pyinstaller --onefile filename.py
3. 在同目錄下的dist資料夾內產生可執行檔 filename

2017年9月14日 星期四

Python : JSON

鑒於JSON愈來愈普及, 很多數據都要求使用JSON的格式,因此特別在這篇做個紀錄, 了解JSON以及如何用Python處理JSON。  

了解 JSON 的 format可以從這個
網站開始: http://jsoneditoronline.org/



#  JSON的規則:

1.  key:value
2.  value 型態可以是 數字, 字串, 布林, 陣列[], 物件{}, NULL, 但key一定是要字串
3.  同一個物件內的key不可重複, 如以下的 Age 就重複了
{
    "Martin": {
        "Age":33,
        "Age":5,
     }
}

2017年9月10日 星期日

Python : regular expression

re module的一些紀錄, 持續update

### Common use of the regular expression

\w   [a-zA-Z0-9_]
\d    [0-9]
\s    space
\\     '\'
.       ''
+     1 or more than 1
.\     everything

### Code

>>> import re
>>> string = 'Age=20'
>>> re.search('\d+', string).group()
20

>>> import re
>>> string = 'Beautiful, is; better*than\nugly'
>>> # 分隔符號:,  ;  *  \n
>>> list= re.split(',|; |\*|\n', string)
>>> list
['Beautiful', 'is', 'better', 'than', 'ugly']

2017年9月5日 星期二

Python : Combobox 範例

距離上次Python文,不知不覺又過了兩三個星期了。 時間過得真快,這段時間除了工作外,還去了花蓮玩兩天! 雖然工作上每天都在改code, 但使用到Python的機會很少,本著學海無涯,惟勤是岸的精神,隔一段時間就來po 一下,以免生疏了。今天介紹Combobox,搭配Button作範例,話不多說,馬上端上code:

#! python2
# coding: utf-8

import Tkinter as tk
import ttk   

def clickOkButton():
    print 'Select ' + str(numberChosen.current()) # 丟出選到的index number

win = tk.Tk()
win.title("Python Combobox example") 

2017年8月14日 星期一

Python : 透過字串與數字轉換來做"進制轉換"

所有的非10進制數字都要以字串的型式表達而數字一律是10進制表示

因此進制轉換就只是字串轉數字或數字轉字串的差別。以下就針對這兩種狀況來說明。

● 字串轉數字

>>> int ('0x10', 16)  #必須告訴直譯器字串是哪種進制
16

2017年8月13日 星期日

Python : Tkinter (Button, Label, Entry, Listbox)

Tkinter 並不是一個很強大的GUI library, 但優點是, 他是Python官方支援的module, 且大部分的OS都有預先安裝它<Note 1>。 之後陸續出現的第三方GUI library相信都是由他啟發的。因此如果不是開發太複雜的GUI tool, 又想了解這個歷史悠久的library, 那就值得來了解他。

話不多說,直接上code:

step 1. 先來創一個空的視窗

from Tkinter import *
    
win = Tk()
win.title("Tk Gui")
win.resizable(width=False, height=False)
win.geometry("500x250")

win.mainloop()