發表文章

目前顯示的是 四月, 2012的文章

Python 教學及程式範例大全

圖片
先前曾經寫了一篇 Java 教學及程式範例大全
整理了一路走來,我自己遇過的 Java 的問題、學習經驗和一堆範例,
最近也開始碰 Python,所以一樣先放一篇大全,
以後有遇上問題解決後就會更新在這邊。

圖片來源:http://wadah-it.com/programming/python/python-programming-introduction.html/attachment/python-logo
Python 入門用書、電子書:
Python 入門教學書籍、電子書推薦 使用 Python 印資料夾內容:
Python:使用os.walk() 遞迴印出資料夾中所有目錄及檔名 其他總整理類型的文章請見:大全中的大全,文章總整理index
關鍵字:Python, 範例, 例子, 程式, 教學

舊版 CentOS 光碟映像檔 ISO、套件下載

圖片
最近需要 CentOS 舊版的光碟,
可是幾乎在所有的 mirror 上都找不到比較舊的版本,
似乎是因為 CentOS 統一只保留幾個較新的版本,
如我在Linux Mirror List 及 yum 設定整理(含 yum proxy)提到的 mirror site 裡,
現在都只剩下 CentOS 5.8 和 6.2 兩個版本可以下載,
其他的資料夾裡面就只有一個 readme。

圖片來源:http://zirkan.com/tips/mount-external-drive-in-centos/
然而不管是當學生或是在工作,
有時候我們還是會需要較舊版本的 CentOS 光碟,
如果找不到真的會相當困擾 (像我,所以才有這篇文出現嘛 orz)。
後來找了資料,發現 CentOS 官方有一個網站,
專門放舊版本 ISO 和 套件:http://vault.centos.org/

這個網站幾乎可以下載到任何東西,
唯一比較麻煩的是舊版本 (如5.7以前) 的 DVD iso檔,
可能是因為怕造成整個網站流量的負擔,
所以 http://vault.centos.org/ 沒有提供舊版本的 DVD iso 直接下載。
那如果我們還是需要要怎麼辦呢?

方法有好幾個:
我在所有 mirror list 中找到了日本的理化学研究所 mirror site
上面似乎有每個版本的DVD iso直接下載,速度也不慢,有幾百KB在跑。在 http://vault.centos.org/ 要下載版本的資料夾中下載 torrent 檔,
用 bt 下載 DVD iso,種子很多,速度也很快!在非不得以的情況下,我們只好下載所有的 cd-iso 下來,
再用 CentOS 所提供的 mkdvdiso.sh 將 iso 轉換成 DVD。 若使用方法3,可以再參考以下步驟:
步驟一:下載所有光碟 iso 檔,可參考 cURL 批次下載指令教學
像要下載 CentOS 5.7,cd-iso 共有八片,則可以下以下指令:
# curl -O http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-[1-8]of8.iso [1/8]: http://vault.centos.org/5.7/isos/x86_64/Cen…

Citi:花旗信用卡電信用戶專案-好禮16選1

圖片
2012.12.29更新:
據說花旗開放加辦後因電信專案刷卡禮太優惠讓一堆人用此專案申請,
所以已在 11.26 取消加辦者用此專案拿 16選1的者刷禮,
現在只要是加辦,無論是何種方案進件,最多都只能拿到 300元刷卡金囉!
相關討論:[情報] 花旗專案首刷禮,臨時變更內容~要辦的快~

一般網路辦卡刷卡滿額禮門檻較高,
似乎是要在一個月內刷滿 7 次且累積達 3000元,
才送禮享家點數16000點,可兌換的滿額禮項目也較少。
一般網路申辦滿額禮的項目及規定可以參考:花旗官網說明

圖片來源:http://www.cool80.com/logo/2009-1-2/huaqi.html
至於花旗信用卡電信用戶專案,
先前似乎是叫「遠傳貴賓專案」、「遠傳電信客戶專案」之類的,
但是其實資格並不限制是遠傳或哪家電信客戶,
反正只要用這個專案申請進件,一方面核卡禮的門檻低很多,
另一方面可選擇的項目也比較多,所以廣受大家喜愛。

最近特地跟專員拿到最新一期的申請書 (2012.10.02版本),
最重要的核卡禮規定和項目節錄如下:

2012/12/31前進件,即可獲得好禮十六選一。
新申辦花旗信用卡,核卡後卡片寄出日起一個月內消費滿NT$399(含)以上,
花旗既有卡友加辦花旗信用卡,核卡後卡片寄出日起一個月內消費滿NT$999(含)以上

首刷禮勾選欄(單選):
請在選項上打v,若無勾選或重複勾選,視同選擇全家便利商店禮券NT$500(587)
□ 聲寶 食物料理棒 ZS-L1125L(580)
□ 西華5公升不鏽鋼免火再煮節能料理鍋(581)
□ Rebacca 20吋硬殼四輪航空箱(582)
□ Beurer德國博依 典雅歐風玻璃體重計 GS12(583)
□ 歌林 厚片烤麵包機 KT-R307(584)
□ 歌林 時尚烤箱5L BO-R051(585)
□ SOGO禮券NT$500(586)
□ 全家便利商店禮券NT$500(587)
□ 刷卡回饋金NT$500(588)
□ 360度旋轉拖把組(589)
□ 白朗 9吋氣流循環扇 (592)
□ iPad/iPhone隨身攜帶充電器 (591)
□ COOLONE 晶鑽時尚神秘紫 20吋四輪旅行箱 (938)
□ 白朗高音質全罩耳機FBFH-A06 (974)
□ 星巴克咖啡兌換券 五張 (975)
□ 白朗輕便式手…

cURL 指令用法與教學

圖片
cURL 和 wget 一樣是 linux 中檔案下載時非常實用的工具,
對於大部份的下載工作兩者都同樣能達成,
curl 比 wget 強大的地方在於他還能支援上傳,
然而 curl 可以應用的地方和方式太多了無法一一深入介紹,
所以我先在最下面列出 curl 指令的說明。

圖片來源:http://www.clipartpal.com/clipart_pd/education/helpmanual_10828.html
之後若有實際應用 curl 的例子或遇上的問題,
會再以另外的文章補充在這裡:
curl: (3) [globbing] illegal character in range specification at pos …cURL 批次下載指令教學 如果在這邊沒看到如何解決你遇上的問題,
也可以參考我的另一篇 wget 指令用法與教學
因為說不定是同樣的問題,只是我用 wget 解決掉了 XD

curl 指令用法如下:
Curl Manual

關鍵字:curl, post, curl linux, curl command, 教學
參考資料:
curl 指令用法Linux curlLinux curl使用简单介绍

cURL 批次下載指令教學

圖片
在先前的文章中有提到,
cURL 和 wget 一樣是 linux 中檔案下載時非常實用的工具,
大部份的下載工作兩者都同樣能達成,
不同的是 curl 還可以支援上傳的功能。
想知道兩者的用法可以先到我先前整理的文章看一下:
wget 指令用法與教學cURL 指令用法與教學 圖片來源:http://web.ee.yuntech.edu.tw/lab/videolab/download.html
這篇要來說的是 curl 如何支援批次下載,
原本想說大部份的下載功能 curl 和 wget 都一樣,
沒想到用 wget 要批次下載時卻出現了這樣的警告。
「Warning: wildcards not supported in HTTP.」
「警告: HTTP 不支援萬用字元。」

原因很明顯啦,就是 wget 的 HTTP 不支援萬用字元的批次下載。
幸好換到 curl 這個問題簡直就是 a piece of cake。
只要善用 [ ] 即可,請看以下範例:

下載單一檔案: # curl -O http://xxx.xx/filename.xxx 批次下載編號 1,2~15: # curl -O http://xxx.xx/filename[1-15].xxx 批次下載編號 01,02~15,自動補0: # curl -O http://xxx.xx/filename[01-15].xxx
這次我用來解決問題的指令和結果如下:
# curl -O http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-[1-8]of8.iso [1/8]: http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-1of8.iso --> CentOS-5.7-x86_64-bin-1of8.iso --_curl_--http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-1of8.iso % Total % Received % Xferd Average Speed Time Time Time Current …

Python 入門教學書籍、電子書推薦

圖片
最近開始接觸 Python,俗話說得好,「工欲善其事,必先利其器」,
既然要開啟這扇門,那麼對於入門的教學書就一定要很要求的啦。
查了網路上的一些討論後,把大家推薦的書列在下面。

實體書:
說到程式語言的入門書,一定不能少掉的就是「深入淺出系列」。
這系列如同其名,真的是把每個程式語言、概念說得非常清楚,
然而他的例子、文字又搭配了大量的圖片,
把深入的內容用簡單淺顯的說明來表達。

以我看過這系列一堆書的經驗,
這系列真的相當適合給初學者學習,
所以這次我在找 python 入門書籍時也是先從這系列開始找起,
另外在看別人討論時對實體書的部份也有很多人提到下面這兩本書。

至於為什麼會有兩本呢?
第一本深入淺出 Python 完全沒問題,
就像要學 Java 我們會看深入淺出 Java 一樣,非常合理。

那麼第二本呢?
大家推薦的原因是因為他是用 Python 的例子來說明程式設計的方法和理論,
對非新手但剛接觸 Python 的程式人員而言,
如果已經看過第一本,再搭配第二本應該會更有感覺。

『《深入淺出程式設計》以反覆式開發的程序清楚明瞭地教導程式設計,一點一滴、循序漸進地逐步增加理論與解釋的深度和廣度,再據以進行實際的編程工作,讓程式獲得持續不斷的提升與改善。這正是編程工作在真實世界中的理想發展模式。同時,本書亦善用教學論壇的優點,讓這樣的教導方式發揮得更淋漓盡致。我將這本書推薦給想要開始探索編程世界卻又不知從何著手的人,也將這本書推薦給非編程新手但是對Python語言有興趣的人。就一般化程式設計與Python編程而言,這絕對是一本值得好好品味的書籍。』 — Jeremy Jones,《Python for Unix and Linux System Administration》一書的共同作者

本站有提供代訂服務及 e-coupon 分享,若有需要,請見: 博客來e-coupon折價券序號分享、免費代訂代購服務
電子書:
除了上面推薦深入淺出的兩本書外,
國內外各大論壇也推薦了不少的電子書,
這些書通常免費,可以下載,重點也還有許多熱心的人幫忙翻譯,
我先前已整理三本書於三篇文章中,
這邊就再依我看到的討論,依據他們覺得適合的人的程度排列。

Python Tutorial 2, 3 (Python入門指南) 中英文版電子書連結整理
Python Tutorial 由 P…

Python:使用os.walk() 遞迴印出資料夾中所有目錄及檔名

圖片
有時候我們會需要在 linux 中列出某個資料夾底下所有的目錄和檔名,
因為這有點像要某個人進每一個資料夾去看看裡面有什麼東西,
姑且就讓我們叫這個走訪的行為叫 walk 吧。(下面那個是Johnnie Walker喔~~~ XD)

圖片來源:http://www.wememap.com/blogs/1619120304
如果想要對資料夾的內容有視覺化的展現,
可以使用 tree 這個指令來列出資料夾底下的結構,
下的指令和顯示的結果如下:
[root@localhost demo]# tree /python/demo/ /python/demo/ |-- os_walk.py |-- root | |-- 1file | |-- 2subDir | | |-- 21file | | |-- 22subDir | | | `-- 221file | | `-- 23file | |-- 3file | `-- 3subDir | `-- 31file `-- walk.py 4 directories, 8 files
由上面我們可以看得出來 root 底下有一些資料夾和檔案,
我已經特別用不同的顏色標示過了,藍色是資料夾,紅色是檔案,
而紫色的則是這篇要說明的 python 檔。

雖然已經可以顯示資料夾內部的檔案結構了,
但這次我想要的並不是要視覺化的結果,
我只想要底下所有檔案的完整絕對路徑就好。
本來想用 bash 之類的 script 寫,但因為基礎不足,
且想說用 script 來做字串處理感覺只會給自己帶來更多麻煩,
所以就想說來研究一下強大的 python。

結果顯示我的選擇是對的,
短短幾行就能達成我的目的,且 python 的程式碼也能在 windows 上運作。
以下是能達成我目的的 Python walk.py 原始碼:
import os for dirPath, dirNames, fileNames in os.walk("/python/demo/"): print dirPath for f in fileNames: print os.path.join(dirPath, f)
Python 執行結果:
[roo…

A Byte of Python (咬一口Python, 简明Python教程) 中英文版電子書連結整理

圖片
A Byte of Python 是適合用來學習 python 程式語言或用作 python 語言教學的電子書之一,網路上的評論是除了 Python Tutorial外,這本書也相當適合給初學入門者使用。

A Byte of Python
A Byte of Python for 2.x (pdf)
A Byte of Python for 3.x (pdf)

簡體、繁體中文譯本:
簡體中文版(简明Python教程) for Python 2.x
繁體中文版(咬一口Python)

關鍵字:A Byte of Python, 2, 3, pdf, 下載, 中文, 中文版

Python Tutorial 2, 3 (Python入門指南) 中英文版電子書連結整理

圖片
Python Tutorial 由 Python 的作者 Guido van Rossum 主筆,
可稱得上是 Python 教學書中最權威的一本。
許多人就只靠著官方網站上的 Tutorial 自學 Python,
非常適合初學者使用。

Python Tutorial (官方版本):
The Python Tutorial (Python 2)
The Python Tutorial (Python 3)

翻譯版本,譯者網站:智拙实验室
Python 2.7 Tutorial 簡體中文對照版 (PDF)
Python 2.4/2.5/3.0 Tutorial 簡體中文對照版

關鍵字:Python Tutorial, 2, 3, pdf, 中文, 下載, 中文版, ppt

Dive Into Python 2, 3 (深入Python) 中英文版電子書連結整理

圖片
Dive into Python 3Dive into Python 的原作者 Mark Pilgrim 針對 Python 3 進行了內容的更新,然而和原書相比,大約是20%的內容被修訂過,而其於80%都是新的,「Compared to Dive Into Python, it’s about 20% revised and 80% new material」。

中文化的部份無論是原著還是新版本,在大陸Python社群啄木鳥社區的努力下,這些非常可貴的教材都有了中文版本。

Dive Into Python 2:http://www.diveintopython.net/
簡體中文版:http://woodpecker.org.cn/diveintopython/

Dive Into Python 3:http://diveintopython3.ep.io/
簡體中文版:http://woodpecker.org.cn/diveintopython3/


雖然這本書很多人推薦,但也有不少人對這本書有意見,
多數人一致認同這本書完全不適合給初學者使用,
加上程式範例有些過時,沒有隨著python的進步而更新,所以寫出來的程式碼會相當醜。
支持的一派則認為這本書書名就說明了是深入!
似乎對有程式開發經驗(如c)的人看來仍是有幫助。

相關的討論可以先看這兩篇,但記得正反的意見都要看喔:
为什么《Dive into Python》不值得推荐《Dive Into Python》非死不可 關鍵字:dive into python, pdf, python tutorial, download, 下載, 中文

wget 指令用法與教學

圖片
wget 是 linux 中除了 curl 外另一個檔案下載的好用工具。
以下是 wget --help 後所得到所有指令用法,
含完整中英文指令集,供大家參考。

圖片來源:http://www.mymacosx.com/terminal/wget-replacement-macos.html
這邊舉一個砍站的指令當作例子,指令為:
wget -t0 -c -nH -np -m -P /localdir http://example.com/mirrors/ftp.redhat.com # -t0: 設定重試次數。當連結中斷或超時,wget會重新連接。-t0代表把重試次數設為無窮多。 # -c: 設定續傳功能。 # -nH: 不建立該網站名稱的子目錄 /example.com/,而直接在當前目錄下建立鏡像的目錄結構。 # -np: 不遍歷父目錄,如果有連結連到目標資料夾的parent或其他目錄,不下載。 # -m: 鏡像,相當同時使用-r和-N。 # -r: 遞迴下載,把文件中所有的連結都下載回來。 # -N: 下載時檢查timestamp,只下載有更新的文件,如果檔案大小和最修改日期都一樣就不下載。 # -P: 指定下載到本機的某個目錄下。
PDF 下載:
Wget Manual

純文字:
GNU Wget 1.12,非互動式檔案下載工具。 用法: wget [選項]... [URL]... 長選項必須用的參數在使用短選項時也是必須的。 啟動: -V, --version 顯示 Wget 版本並離開 -h, --help 印出這段說明文字 -b, --background 啟動後進入背景作業 -e, --execute=指令 執行 ‘.wgetrc’ 形式的指令 紀錄訊息及輸入檔案: -o, --output-file=檔案 將紀錄訊息寫入<檔案>中 -a, --append-output=檔案 將紀錄訊息加入<檔案>末端 -d, --debug 印出偵錯訊息 -q, --quiet 安靜模式 (不輸出訊息) -v…

Linux Script:自動備份或刪除超過特定時間之過期檔案

圖片
在使用 linux 時,有時候我們會想要檢查特定目錄下的所有或某些檔案,
看看是不是這些檔案已經超過時效,若超過則刪除或移動到其他備份媒體,
這通常會用在系統 log 的備份等,要達成這個目的,我們該怎麼做呢?

圖片來源:http://www.icosky.com/icon/find-19-icon/
首先我們要利用 linux 中非常強大的指令 find,
利用 find 找到符合特定規則的檔案後再使用指令參數-exec,
這個參數可以將 find 到的結果接過來執行,如果用得好,應該是項非常好用的工具。

說了這麼多,先來個簡單的例子,例如要把 tmp 資料夾底下的 .txt 檔備份到另一個地方:
# find /tmp/ -type f -name "*.txt" -exec cp {} ~/txt \;
首先就 find 相關的參數作說明:
find /tmp/ -type f -name "*.txt" 
/tmp/ 要尋找的目標資料夾
-type f 尋找類型為檔案
-name "*.txt" 尋找檔名為 .txt 結尾
若有使用萬用字元星號*的話建議加上引號,如 "*.txt" 或 '*.txt',
否則在 find 時似乎會有不明錯誤發生,有些該找到的檔案會找不到!

接著說明 -exec 後方的部分
-exec cp {} ~/txt \;
cp  指令
{}  找到的結果檔案
~/txt  cp 的參數
\;  指令的結束符號

下面這行指令就是找到 /tmp/ 資料夾底下超過一天的 .log 檔,然後把他們都刪掉,
其中 -mtime +1 就是要找超過一天沒有被修改的檔案。
# find /tmp/ -type f -name "*.log" -mtime +1 -exec rm -rf {} \;
關鍵字:Linux, Script, bash, shell, 刪除, 超過, 特定時間, 過期, 檔案, 定時, 老舊, 目錄, 資料夾, 備份, 清空, 自動,
參考資料:
活用 find 指令參數-exec一個刪除檔案的 scrip 問題在 Linux 下使用 find 指令查詢目錄與檔案的速查筆記

Linux Script:mv, rename 單次及批次修改檔案名稱

圖片
圖片來源:http://gihansblog.wordpress.com/2011/10/29/a-shell-script-for-renaming-large-number-of-file-in-linux/
在 Windows 系統中,無論我們要重新命名資料夾或是檔案,
通常都點下右鍵後選擇重新命名即可,
如果對快捷鍵比較熟,直接按下 F2 可以更快地達成目的。
而在 Linux 系統中,重新命名資料夾或檔案也可以透過同一個指令來達成,這個指令是 mv !mv 是 move 的縮寫,他除了移動檔案資料夾的功能外也可以同時重新命名。
所以其實仔細想想拿他來重新命名檔案也不會很難理解啦,
重新命名時只是把檔案移動到同一個資料夾,然後趁著移動時把檔名給順便改了!

說了這麼多那 mv 指令到底該怎麼使用呢?
# mv $1 $2 # $1: 舊檔案或資料夾名稱 # $2: 新的檔案或資料夾名稱 mv oldname.txt newname.txt
上面的方法是用來重新命名單一檔案或資料夾,
但是當一個目錄資料夾底下有很多有特定規則檔名的檔案需要改名,
例如相機產生的檔案 IMG001.jpg~IMG999.jpg 超多檔案,
這絕對不可能直接用 mv 一個個慢慢敲來改名的。
這時候另一個指令就可以派上用場了,
rename 這個指令可以用來批次修改檔名共同的部分,使用方式如下:

# rename $1 $2 $3 # $1: 要被取代的關鍵字 # $2: 新的關鍵字 # $3: 檔名符合這個規則的才取代 # 把 IMG001.jpg, IMG002.jpg… 換成 img001.jpg, img002.jpg… rename IMG img IMG* # 把所有 .htm 檔案改成 .html rename .htm .html *.htm # 把檔案 foo1, ..., foo9, foo10, ..., foo278. # 改成 foo001, ..., foo009, foo010, ..., foo278. rename foo foo0 foo? rename foo foo0 foo??
關鍵字:linux, rename, file, folder, 改檔名, 重新命名, batch rename, 批次, 用法, 指令, move, mv…

Linux Script:查詢Linux及Linux Kernel版本

圖片
圖片來源:http://apcmag.com/how-to-choose-the-best-linux-distribution.htm
以下是有關查看 Linux Kernel,或查看 Linux Distribution 版本的指令:
@ 印出 Linux Kernel 版本 [root@localhost ~]# uname -a Linux localhost.localdomain 2.6.18-238.el5xen #1 SMP Thu Jan 13 16:41:45 EST 2011 x86_64 x86_64 x86_64 GNU/Linux @ 印出 Linux 發行版本,這邊是 CentOS 的結果 @ 這個指令通用於所有的發行版本,如:Redhat、SuSE、Debian等 [root@localhost ~]# lsb_release -a LSB Version: :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarch Distributor ID: CentOS Description: CentOS release 5.8 (Final) Release: 5.8 Codename: Final
關鍵字:查詢, 查看, Linux, Kernel, 版本, CentOS, Redhat, SuSE, Debian, Ubuntu, 種類, 指令, 如何, 看
參考資料:
查看linux版本的三种常用方法

解決 yum update錯誤:[Errno -1] Metadata file does not match checksum

圖片
圖片來源:http://blog.tuxforge.com/yum-update-exclude-packages/
有時我們在使用 yum update 時會遇到下面的錯誤訊息,
這似乎是因為 Linux 版本不是最新版的關係,
像我是使用 CentOS 5.6,但此時 5 系列的最新版本已經是 5.8 了。
[root@localhost ~]# yum update Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: centos.mirror.cdnetworks.com * extras: centos.mirror.cdnetworks.com * updates: centos.mirror.cdnetworks.com base | 1.1 kB 00:00 base/primary | 1.2 MB 00:00 extras | 2.1 kB 00:00 extras/primary_db | 175 kB 00:00 updates | 1.9 kB 00:00 updates/primary_db | 187 kB 00:00 http://centos.mirror.cdnetworks.com/5.8/updates/x86_64/repodata/primary.sqlite.bz2: [Errno -1] Metadata file does not match checksum Trying other mirror.
查了一下發現以下的解法:
yum clean all yum clean metadat…