anaconda的安裝
anaconda使用後會出現一些白框框住程式碼
How to fix:
Sublime > Preferences >Package >Anaconda >Settings User
會出現一個空白文件,加上{"anaconda_linting":false}即可
2016年12月22日 星期四
2016年12月20日 星期二
[Python]1.9.2 自定義函式
def 函式名稱(參數1, 參數2........):
若干運算(敘述)
return 回傳值1, 回傳值2......
可以沒有回傳值
def power(base,exp):
return base**exp
函式的呼叫
power(2,3)
power(exp=3,base=2)
遞迴
如果我們今天有一個清單
參數的預設值
def add(a,b=1):
return a+b
注意:帶有預設值的參數都需擺在沒有預設值的後面,
位置呼叫時無法指定哪一些參數用預設值
若干運算(敘述)
return 回傳值1, 回傳值2......
可以沒有回傳值
def power(base,exp):
return base**exp
函式的呼叫
power(2,3)
power(exp=3,base=2)
遞迴
如果我們今天有一個清單
lst = [1,2,[1,2,3],2,4,5,[23,12],[12,23,34,67]] def print_list(lst): for item in lst: if isinstance(item,list): print_list(item) else: print item, #isinstance(item,型態)這個方法就是問 #請問item是這個型態嗎? #這邊要注意,運用遞回的方法把每一層的list剝開 print_list(lst)執行結果 >>>1 2 1 2 3 2 4 5 23 12 12 23 34 67
參數的預設值
def add(a,b=1):
return a+b
注意:帶有預設值的參數都需擺在沒有預設值的後面,
位置呼叫時無法指定哪一些參數用預設值
2016年12月19日 星期一
[Python]1.9.1 內建函式
1.9.1 內建函式
內建函式的paper
工廠函式:專門負責型態或是製造資料
for example:
int('99') -------------99
float('1.73')----------1.73
bool('')---------------False
str(20)----------------'20'
list((1,2,3))----------[1,2,3]
list(set([1,1,2,2])----[1,2]
全部或任何
“對於所有”(for all) “存在一個” (exist) 在邏輯上是個很重要的概念
內建函式的paper
工廠函式:專門負責型態或是製造資料
for example:
int('99') -------------99
float('1.73')----------1.73
bool('')---------------False
str(20)----------------'20'
list((1,2,3))----------[1,2,3]
list(set([1,1,2,2])----[1,2]
全部或任何
“對於所有”(for all) “存在一個” (exist) 在邏輯上是個很重要的概念
member = {'jack':90,'jerry':85,'jimmy':43,'Wang':9,'LI':23}
a = {}
for name,grade in member.items():
if grade>60:
a[name]=True
else:
a[name]=False
if all(a.values()):
print "Everyone pass the test"
else:
print "someone did not pass the test"
for name,ch in a.items():
if ch == False:
print name
#這裡要注意的是dic資料的取用,用for 方法
#a.items()
#a.keys()
#a.values()
執行結果
分析
all():會對list裡面的所有元素進行檢查,若全部元素為真,傳回True,否則傳回False
另一個函數any()則是只要一個人為真,就傳回真了
最大與最小
max(lst)
min(lst)
產生連續的整數
range(10)-----------[0,1,2,3,4,5,6,7,8,9]
range(2,7)----------[2,3,4,5,6]
range(2,13,3)-------[2,5,8,11]
群集的長度
>>>lst = [1,2,3,4,5]
>>>print len(lst)
>>>5
>>>dic = {1:2,2:2,3:2}
>>>print len(dic)
>>>5
[Python]1.8 例外
動態語言中,除了語法錯誤造成的Syntax Error以外,幾乎所有的錯誤都來自執行期的錯誤.像是TypeError或是NameError等等.當錯誤發生時,Python會產生Traceback,方便檢視錯誤的來源.
但是在開發時,重要的不是辨識每一個錯誤而是排除掉一些不是錯誤的錯誤,例外.
舉個例子:

分析:如果沒有用try - except 敘述時,有幾行( %%%, 1 2 3)沒有符合兩個數字的形式,便會出現ValueError.如果用if -else 敘述時,會出現很多種複雜的狀況.但其實我們並不需要去處理跟我們需要不相關的事.
執行:我們先執行try的程式碼,當發生錯誤時,立刻停止try,進入except 執行suite 裡的程式碼(ex: pass),在這題等於我們略過了所有不符合規格的行.
#有個檔案test_file.txt 3 4 1 3 20 19 %%% 88 7 1 2 3 0
#使用try except 敘述來避開中間%%%的例外
f = open('/Users/lijack/Desktop/test_file.txt')
for lines in f:
try:
a , b = lines.strip().split()
print "{:>2} + {:>2} ={:>3}".format(a,b,int(a)+int(b))
except:
pass
#python 不允許有suite是空白的
f.close
#strip()函數會移除字串頭尾指定的符號
string = " 12342342314213 "
print string.strip()
string1 = "8888888dfasfsdfsdafasdf888888"
print string1.strip('8')
#split函數:用特定字符切割字串
string2 = "hello world jack"
a,b,c = string2.split()
print a
print b
print c

分析:如果沒有用try - except 敘述時,有幾行( %%%, 1 2 3)沒有符合兩個數字的形式,便會出現ValueError.如果用if -else 敘述時,會出現很多種複雜的狀況.但其實我們並不需要去處理跟我們需要不相關的事.
執行:我們先執行try的程式碼,當發生錯誤時,立刻停止try,進入except 執行suite 裡的程式碼(ex: pass),在這題等於我們略過了所有不符合規格的行.
2016年12月13日 星期二
[Django] 1.7.3 讀檔與寫入檔案
資料檔的讀寫是python 的基本功能之一
開啟檔案:使用open函數
windows: fp = open('C:\\Users\\jack\\Desktop\\test_file.txt')
mac : fp = open('/Users/Documents/test_file.txt')
因為windows的路徑的斜線是\,會造成跳脫字元,所以要輸入兩個\
而mac沒有這個困擾
r:讀檔 w:寫入 a:附加
讀取檔案的方法有三種:read(), readline(), readlines()
read() : 一口氣讀完
readline():一次只讀一行文字檔,傳回一個字串
readlines():把每一行拆開放在不同的字串變數,最後彙整成一個串列
readline() 照理說會顯示
>>>
Beautiful is better than ugly
Explicit is better than implicit
>>>
因為純文字格式每行後面都有個換行符號\n ,加上本身print也有一個換行
有兩種解決方法
(1) 用strip()清除字串頭尾非必要字元
(2) print ,end=""
使用with敘述可以讓程式更簡潔
開啟檔案:使用open函數
fp = open('test_file.txt','r')
a = fp.read()
b = fp.readline()
c = fp.readlines()
fp.close()
其中,test_file的欄位可填入絕對路徑,但是請注意windows: fp = open('C:\\Users\\jack\\Desktop\\test_file.txt')
mac : fp = open('/Users/Documents/test_file.txt')
因為windows的路徑的斜線是\,會造成跳脫字元,所以要輸入兩個\
而mac沒有這個困擾
r:讀檔 w:寫入 a:附加
讀取檔案的方法有三種:read(), readline(), readlines()
read() : 一口氣讀完
readline():一次只讀一行文字檔,傳回一個字串
readlines():把每一行拆開放在不同的字串變數,最後彙整成一個串列
f = open ('C:\\Users\\jack\\Desktop\\MP21602\\zop.txt','r')
print (f.read())
#f = open ('C:\\Users\\jack\\Desktop\\MP21602\\zop.txt','r')
print (f.readline())
print (f.readline())
f = open ('C:\\Users\\jack\\Desktop\\MP21602\\zop.txt','r')
print (f.readlines())
read() 會顯示全部內容readline() 照理說會顯示
>>>
Beautiful is better than ugly
Explicit is better than implicit
>>>
因為純文字格式每行後面都有個換行符號\n ,加上本身print也有一個換行
有兩種解決方法
(1) 用strip()清除字串頭尾非必要字元
(2) print ,end=""
使用with敘述可以讓程式更簡潔
with open('C:\\Users\\jack\\Desktop\\MP21602\\zop.txt','r') as f:
for line in f:
print line
上述程式把要讀取的檔案名稱寫在程式碼並不是個很好的方式,通常會把要操作的文字對象已執行參數的方式輸入
程式命令列函數可以用sys.argv取得
import sys
if len(sys.argv)<2:
print("How to use: python 8-2.py class")
exit(1)
std_data = dict()
with open(sys.argv[1],encoding='utf-8') as fp:
alldata = fp.readlines()
for line in alldata:
no,name = line.rstrip('\n').split(',')
std_data[no] = name
print (std_data)
<\pre>
[Django]1.7.2
break and continue
如果while的條件總是成立,我們稱其為無窮迴圈.
使用時機:當我們的程式需要等待使用者的一些要求時
while True:
print “never stop”
而break 跟 continue 則可以強制介入迴圈
n = 5
count = 1
while True:
print "just print {} times".format(count)
if count == n:
break
count+=1
continue 的用法
n = 1
while n<=10:
if n==5:
n+=1
continue
print n
n+=1
for 迴圈
lst = [1,2,3]
for num in lst:
print num
for item in lst:
suite
將lst中的元素一個個取出,每取出一個便將他賦值(代入)
並且執行一次suite
for 可以對清單 元組 字典 字串 進行迭代
使用時機
for :當重複的次數可以被計算時
while:當條件清楚時
comprehension
lst = [1,2,3,4,5]
lst_eq = [n**2 for n in lst]
lst_eq1=[n**2 for n in lst if n%2==0]
>>>lst_eq
[1,4,9,16,25]
>>>lst_eq1
[4,16]
scores = [88,90,100,65,78]
score_dic = {student_id :score for student_id,score in enumerate(scores)}
>>>score_dic
{0: 88, 1: 90, 2: 100, 3: 65, 4: 78}
enumerate是一個函數,當它與for 搭配時,他會同時把索引值與元素取出
1.7 輸入與輸出
print函式
1.任何基本資料都可以用print輸出
2.print 1,———不斷行列印 加逗號
input函式
guess = 6
while True:
guess_number = int(input('please enter a num \n'))
if guess_number == guess:
print "right"
break
else:
print “wrong"
注意:任何輸入都會被當成字串,需要轉換
如果while的條件總是成立,我們稱其為無窮迴圈.
使用時機:當我們的程式需要等待使用者的一些要求時
while True:
print “never stop”
而break 跟 continue 則可以強制介入迴圈
n = 5
count = 1
while True:
print "just print {} times".format(count)
if count == n:
break
count+=1
continue 的用法
n = 1
while n<=10:
if n==5:
n+=1
continue
print n
n+=1
for 迴圈
lst = [1,2,3]
for num in lst:
print num
for item in lst:
suite
將lst中的元素一個個取出,每取出一個便將他賦值(代入)
並且執行一次suite
for 可以對清單 元組 字典 字串 進行迭代
使用時機
for :當重複的次數可以被計算時
while:當條件清楚時
comprehension
lst = [1,2,3,4,5]
lst_eq = [n**2 for n in lst]
lst_eq1=[n**2 for n in lst if n%2==0]
>>>lst_eq
[1,4,9,16,25]
>>>lst_eq1
[4,16]
scores = [88,90,100,65,78]
score_dic = {student_id :score for student_id,score in enumerate(scores)}
>>>score_dic
{0: 88, 1: 90, 2: 100, 3: 65, 4: 78}
enumerate是一個函數,當它與for 搭配時,他會同時把索引值與元素取出
1.7 輸入與輸出
print函式
1.任何基本資料都可以用print輸出
2.print 1,———不斷行列印 加逗號
input函式
guess = 6
while True:
guess_number = int(input('please enter a num \n'))
if guess_number == guess:
print "right"
break
else:
print “wrong"
注意:任何輸入都會被當成字串,需要轉換
[python] selenium 爬蟲安裝指南
http://www.kenst.com/2015/03/installing-chromedriver-on-mac-osx/
1.First, you need to download chromedriver
2.create a path for chromedriver
sudo nano /etc/paths
add path of chromedriver
ex: /Users/jackli/Documents/webdriver
To check:
echo $PATH
3.move chromedriver to your own path
1.First, you need to download chromedriver
2.create a path for chromedriver
sudo nano /etc/paths
add path of chromedriver
ex: /Users/jackli/Documents/webdriver
To check:
echo $PATH
3.move chromedriver to your own path
2016年11月24日 星期四
[Python]基礎篇 1.5
1.5.1 附值運算
a = 2
a = 'jack'
a=3.1415
左邊的變數參照右邊的資料
1.5.2 空運算
pass ???
1.5.3 自運算和加強運算
a+=5
a-=5
a*=5
a/=5
a%=5
a**=5
1.5.4 比較運算
1>0 True
1<0 False
0>=1 False
0<=1 True
0==0 True
0!=0 False
python有個比較特別的特性
可以同時使用兩個運算符

其他語言需用0<a且a<=5
1.5.5 邏輯運算
and
or
not
1.5.6 身分運算 is
== 判斷兩者的值是否相等
is 判斷兩者是否來自同個記憶體位址
這邊因為整數1是個不可變資料
所以python將a跟b都參照到了1
[1,2,3]是個可變資料
所以lst_1,lst_2參照道的是兩個不同的位址
1.5.7 隸屬運算 in
a = 2
a = 'jack'
a=3.1415
左邊的變數參照右邊的資料
1.5.2 空運算
pass ???
1.5.3 自運算和加強運算
a+=5
a-=5
a*=5
a/=5
a%=5
a**=5
1.5.4 比較運算
1>0 True
1<0 False
0>=1 False
0<=1 True
0==0 True
0!=0 False
python有個比較特別的特性
可以同時使用兩個運算符
其他語言需用0<a且a<=5
1.5.5 邏輯運算
and
or
not
1.5.6 身分運算 is
== 判斷兩者的值是否相等
is 判斷兩者是否來自同個記憶體位址
這邊因為整數1是個不可變資料
所以python將a跟b都參照到了1
[1,2,3]是個可變資料
所以lst_1,lst_2參照道的是兩個不同的位址
1.5.7 隸屬運算 in
2016年11月23日 星期三
[Linux]nfs的使用
為了方便在多台linux間傳輸資料,所以需要一個NFS的系統
先用rpm 查詢 nfc ,rpcbind 有沒有安裝
rpm -qa |grep rpcbind
rpm -qa |grep nfc
執行/etc/init.d 下的rpcbind
(這裡有個問題,不知道為什麼不能直接執行,要先切換到init.d目錄下
/etc/init.d/rpcbind start
建立一個資料夾給NFS掛載
mkdir -p /home/nfs/Qdownload
-p 能直接建立樹狀的目錄,不用一層層建立資料夾
掛載目錄到本地資料夾
mount -t nfs 192.168.1.90:/Qdownload \
>/home/nfs/Qdownload
\+enter鍵 跨行輸入
df 查看掛載的情況
unmount 卸載
鳥哥NFS介紹
先用rpm 查詢 nfc ,rpcbind 有沒有安裝
rpm -qa |grep rpcbind
rpm -qa |grep nfc
執行/etc/init.d 下的rpcbind
(這裡有個問題,不知道為什麼不能直接執行,要先切換到init.d目錄下
/etc/init.d/rpcbind start
建立一個資料夾給NFS掛載
mkdir -p /home/nfs/Qdownload
-p 能直接建立樹狀的目錄,不用一層層建立資料夾
掛載目錄到本地資料夾
mount -t nfs 192.168.1.90:/Qdownload \
>/home/nfs/Qdownload
\+enter鍵 跨行輸入
df 查看掛載的情況
unmount 卸載
鳥哥NFS介紹
[Django]Github的建置
之前因為換電腦的關係,打的code只有複製下來,想在新的電腦上面用還需要安裝各種套件才能執行原本的code,但是忘記打包requirement.txt ,也無法自動安裝。
所以想說學習一下github的使用方法
首先先進入虛擬環境中
source test_env/bin/activate
建立一個Django專案
django-admin.py startproject mysite
接下來是Git 的初始化
先安裝git
yum install git
再來初始化
git init
git add --all
git commit -m "init"
git remote add origin https://github.com/412988937/mysite.git
git push -u origin master
所以想說學習一下github的使用方法
首先先進入虛擬環境中
source test_env/bin/activate
建立一個Django專案
django-admin.py startproject mysite
接下來是Git 的初始化
先安裝git
yum install git
再來初始化
git init
git add --all
git commit -m "init"
git remote add origin https://github.com/412988937/mysite.git
git push -u origin master
2016年11月18日 星期五
[Raspberry Pi 3]建置環境與遠端操控
這個禮拜去光華的良興電子購買了Raspberry Pi 3 model B
RP3:1690元
殼子:350元(買貴了)
買來之後發現,RP3 的散熱不太好,隨便播個影片CPU就飆到90%
散熱片是必須,長時間執行的話要加買一個可以裝風扇的殼
以下是灌系統的步驟:
1.準備一張記憶卡
2.到Raspberry官網下載映像檔
說明一下各系統的差異:
NOOBS:一種多重開機方式,可以選擇要灌哪一種系統,需要較大記憶卡
Raspbian:官方版本,支援最多
OSMC:專門撥放影片的系統,很像一個多媒體播放器
(第一次安裝界面記得要選英文,中文會都是亂碼
其他的我還沒用過................
3.用Win32 Disk Imager 把下載的img燒到記憶卡
(這個軟體只能讀取img,無法讀取iso)
4.之後就可以開機了
系統預設的帳密:pi /raspberry
更改密碼指令:passwd pi
啟用root帳號:sudo passed root
剛啟動時,系統無法充分利用sd卡的空間,於是輸入
sudo raspi-config 進入raspberry pi 的配置工具

第一個選項能擴展系統的使用空間
其他很多細項可以研究
(8.overclock 超頻)
為了方便遠端使用,我們會把rp3的ssh跟vnc server 打開
sudo apt-get -y update #更新所有套件列表 #-y 對所有詢問同意
sudo apt-get -y upgrate #更新所有套件 #更新很久
sudo apt-get -y install tightvncserver #灌VNC server 提供linux的遠端桌面功能
apt-get 指令介紹
RP3:1690元
殼子:350元(買貴了)
買來之後發現,RP3 的散熱不太好,隨便播個影片CPU就飆到90%
散熱片是必須,長時間執行的話要加買一個可以裝風扇的殼
以下是灌系統的步驟:
1.準備一張記憶卡
2.到Raspberry官網下載映像檔
說明一下各系統的差異:
NOOBS:一種多重開機方式,可以選擇要灌哪一種系統,需要較大記憶卡
Raspbian:官方版本,支援最多
OSMC:專門撥放影片的系統,很像一個多媒體播放器
(第一次安裝界面記得要選英文,中文會都是亂碼
其他的我還沒用過................
3.用Win32 Disk Imager 把下載的img燒到記憶卡
(這個軟體只能讀取img,無法讀取iso)
4.之後就可以開機了
系統預設的帳密:pi /raspberry
更改密碼指令:passwd pi
啟用root帳號:sudo passed root
剛啟動時,系統無法充分利用sd卡的空間,於是輸入
sudo raspi-config 進入raspberry pi 的配置工具
第一個選項能擴展系統的使用空間
其他很多細項可以研究
(8.overclock 超頻)
為了方便遠端使用,我們會把rp3的ssh跟vnc server 打開
sudo apt-get -y update #更新所有套件列表 #-y 對所有詢問同意
sudo apt-get -y upgrate #更新所有套件 #更新很久
sudo apt-get -y install tightvncserver #灌VNC server 提供linux的遠端桌面功能
apt-get 指令介紹
[Django]sublime 2 的安裝與開始選單的修改
首先我們可以先到sublime的官網下載所需要的版本
然後切換到下載目錄,並輸入
tar vxjf Sublime\ Text\ 2.0.2.tar.bz2 #後面那一串是檔名,按兩次tab即可
sudo mv Sublime\ Text\ 2 /opt/ #將解壓縮後產生的Sublime\ Text\ 2資料夾
搬移到/opt/ (需要root的權限)
sudo ln -s /opt/Sublime\ Text\ 2/sublime_text /usr/bin/sublime
#建立連結檔
Sublime\ Text\ 2 = Sublime Text 2 (因為檔名中間都有空格所以這樣表示)
ln 指令的介紹
開始選單的修改

然後切換到下載目錄,並輸入
tar vxjf Sublime\ Text\ 2.0.2.tar.bz2 #後面那一串是檔名,按兩次tab即可
sudo mv Sublime\ Text\ 2 /opt/ #將解壓縮後產生的Sublime\ Text\ 2資料夾
搬移到/opt/ (需要root的權限)
sudo ln -s /opt/Sublime\ Text\ 2/sublime_text /usr/bin/sublime
#建立連結檔
Sublime\ Text\ 2 = Sublime Text 2 (因為檔名中間都有空格所以這樣表示)
ln 指令的介紹
開始選單的修改
2016年11月15日 星期二
[Python]基礎篇1.4
資料型態
將會介紹python幾種常見的資料型態,像整數、浮點數、字串、清單、字典等等
1.4.1 整數與浮點數

1.4.2 布林值
True / False
1.4.3 字串(string)
>>>string = '' #空字串
>>>string_a = 'h' #字串以''或""框住
>>>string_b = 'ello'
>>>string_a + string_b #字串間的串接
'hello'
另外我們可以用三雙引號(""")來製造跨行的字串
(又稱:doc string (文件字串)
用三雙引號製造出的字串不僅能跨行
還可以保留他字面上的格式
如果要取出字串中某個字元
string[idex(索引)]
string[0:5] #從index = 0 取到 index =4
string[:5] #從index的開頭取到index = 4
string[5:] #從index = 5 取到index的尾巴
string[2:8] #從index = 2 取到 index = 7
string[:] #簡易複製字串的方法
字串也能進行格式化

字串中有些特殊的字串叫跳脫字元(escape character)
print "hello\n"
\\ 倒斜線
\' 單引號
\" 雙引號
\a 鈴響
\b 退格
\n 換行
\t 縮排
使用非英文的字串
#-*- coding: utf-8 -*-
1.4.4 清單 (List)
清單是一個序列(sequence),我們能夠存放任何型態的資料在清單之中
>>>lst = [ 'abc' , 27 , None]
取出元素 >>>lst[0] 'abc'
>>>lst[1] 27
>>>lst[2] None
>>>lst[-1] None
>>>lst[1:] [27,None]
改變元素 >>>lst[1] = 28
加入元素 >>>lst.append('New')
彈出元素 >>>lst.pop(2) #第二個元素消失
排序元素 >>>lst.sort()
1.4.5 Tuple
Tuple is similiar with list, they are both sequences ,but the elements in the Tuple are static
for example:
>>>t=(2,4,5)
>>>t[0]
2
>>>t[1]=0
TypeError
We find that if we decide to change the element of Tuple, there is a type error.
Another point we need to know is:
if we want a tuple with single element, we are forced to add a comma,EX:
t=(1,)
because if we type t=(1), python will mislead to t=1
1.4.6 Dictionary{}
Is not a sequence. Is a corresponding data structure.
>>>dic = { 'name' : 'jack', 'age':27}
>>>dic['name']
'jack'
>>>dic['age']
27
we call 'name', 'age' --------key
'jack', 27 ----------value
更改字典值:dic['key']=value_1
增加字典值:dic['key_1]=value_2
1.4.7 巢狀結構
person = ['jack',27,[1998, 09,30]}

1.4.8 使用群集的好處
score = [90,91,92,93]
total = sum(score)
1.4.9 可變與不可變
a=1
a=2
a是個參照,改變的是參照的位置
string = "abc"
string[1]='x'
TypeError
因為字串的內容是不可變的
字典的鍵是要是不可變的資料
將會介紹python幾種常見的資料型態,像整數、浮點數、字串、清單、字典等等
1.4.1 整數與浮點數

1.4.2 布林值
True / False
1.4.3 字串(string)
>>>string = '' #空字串
>>>string_a = 'h' #字串以''或""框住
>>>string_b = 'ello'
>>>string_a + string_b #字串間的串接
'hello'
另外我們可以用三雙引號(""")來製造跨行的字串(又稱:doc string (文件字串)
用三雙引號製造出的字串不僅能跨行
還可以保留他字面上的格式
如果要取出字串中某個字元
string[idex(索引)]
string[0:5] #從index = 0 取到 index =4
string[:5] #從index的開頭取到index = 4
string[5:] #從index = 5 取到index的尾巴
string[2:8] #從index = 2 取到 index = 7
string[:] #簡易複製字串的方法
字串也能進行格式化

字串中有些特殊的字串叫跳脫字元(escape character)
print "hello\n"
\\ 倒斜線
\' 單引號
\" 雙引號
\a 鈴響
\b 退格
\n 換行
\t 縮排
使用非英文的字串
#-*- coding: utf-8 -*-
1.4.4 清單 (List)
清單是一個序列(sequence),我們能夠存放任何型態的資料在清單之中
>>>lst = [ 'abc' , 27 , None]
取出元素 >>>lst[0] 'abc'
>>>lst[1] 27
>>>lst[2] None
>>>lst[-1] None
>>>lst[1:] [27,None]
改變元素 >>>lst[1] = 28
加入元素 >>>lst.append('New')
彈出元素 >>>lst.pop(2) #第二個元素消失
排序元素 >>>lst.sort()
1.4.5 Tuple
Tuple is similiar with list, they are both sequences ,but the elements in the Tuple are static
for example:
>>>t=(2,4,5)
>>>t[0]
2
>>>t[1]=0
TypeError
We find that if we decide to change the element of Tuple, there is a type error.
Another point we need to know is:
if we want a tuple with single element, we are forced to add a comma,EX:
t=(1,)
because if we type t=(1), python will mislead to t=1
1.4.6 Dictionary{}
Is not a sequence. Is a corresponding data structure.
>>>dic = { 'name' : 'jack', 'age':27}
>>>dic['name']
'jack'
>>>dic['age']
27
we call 'name', 'age' --------key
'jack', 27 ----------value
更改字典值:dic['key']=value_1
增加字典值:dic['key_1]=value_2
1.4.7 巢狀結構
person = ['jack',27,[1998, 09,30]}
1.4.8 使用群集的好處
score = [90,91,92,93]
total = sum(score)
1.4.9 可變與不可變
a=1
a=2
a是個參照,改變的是參照的位置
string = "abc"
string[1]='x'
TypeError
因為字串的內容是不可變的
字典的鍵是要是不可變的資料
2016年11月10日 星期四
ftp 資料
http://www.phpini.com/linux/wget-download-ftp-whole-directory
http://255121.blogspot.tw/2015/01/linux-ftp.html
http://yahoon.blog.51cto.com/13184/200991
http://charleslin74.pixnet.net/blog/post/434429402-%5Blinux%5D-wget%E6%8C%87%E4%BB%A4%E7%9A%84%E7%94%A8%E6%B3%95
以下是有關ftp的指令
Example:
ftp:192.168.1.1
帳號:ruby12345
密碼:abcd1234
目錄結構:HDD1/pdsite
如果我要下載整個目錄
wget -r ftp://ruby12345:abcd1234@192.168.1.1//HDD1

http://255121.blogspot.tw/2015/01/linux-ftp.html
http://yahoon.blog.51cto.com/13184/200991
http://charleslin74.pixnet.net/blog/post/434429402-%5Blinux%5D-wget%E6%8C%87%E4%BB%A4%E7%9A%84%E7%94%A8%E6%B3%95
以下是有關ftp的指令
Example:
ftp:192.168.1.1
帳號:ruby12345
密碼:abcd1234
目錄結構:HDD1/pdsite
如果我要下載整個目錄
wget -r ftp://ruby12345:abcd1234@192.168.1.1//HDD1

[Python]基礎篇1.3
python的基礎
1.3.1
進入python shell >>打開terminal,輸入python
1.3.2
如果遇到不會用的指令>>help([指令])
1.3.3
變數命名須遵循以下規則
1.以底線或英文字母開頭
2.以底線或英文字母或數字連綴
3.不可與保留字相同
4.大小寫有別(case sensitive)
ex:
(O) result
(O)_result
(O)result_2
(O)Result_2
(X)$reuslt
(X)2_result
(X)for
1.3.4
變數的命名有其慣例,可以去找PEP8(Python Enhancement Proposals)來參考
1.3.5
關於資料型態,我們會在之後介紹重要資料結構(浮點數、字串、清單、字典.....)
python存在一個不具備任何資料型態的資料:None
且不同的資料型態有其獨特的運算符的方法
1.3.6
關於變數參照
>>>result=2
在這個例子中,result這個變數儲存了2這個整數,但實際上Python並沒有讓result直接紀錄2,而是找了一個可以儲存2這個整數的空間(容器),並讓result參考到了該空間。
result只是一張標籤,上面寫著儲存物的儲存位置
>>>變數result參照了2這個整數
參照的重要性
>>>result=2
>>>result=3.0
>>>result='hello'
>>>result=[1.2.3]
我們發現該變數不但能儲存不同型態的資料,還能隨時更換資料型態。
這在C/C++等靜態語言是不可能的事情,因為靜態語言的變數必須在一開始變數宣告時定義
對python 而言,變數只是個參照,參照了某個裝資料的容器
優點:減少了變數宣告的工作,能隨時更換儲存資料的類型
缺點:慢,難發現錯誤
1.3.7
vi----------------------------------開啟文字檔編輯器
test.py
a=10
b=20
result = a + b
print result
:w test.py-------------------------儲存檔案為test.py
python test.py--------------------執行
1.3.8
封裝、參數化與函式
1.3.9
類別與物件
每一種資料型態都是一種類別
a=10------------10是整數這個類別的實例(instance)or物件(object)
Example
如果我們有一個類別叫做Cat, my_cat是Cat的實例
>>>my_cat.name #name是Cat的一種屬性(attribute)
'Kitty'
>>>my_cat.shout() #shout是Cat的一種方法(method)
Meow
之後會學習如何自訂類別
2016年11月9日 星期三
[Django]安裝django與建置
pip install [套件名稱]
pip unintall [套件名稱]
pip install Django==1.7.1 安裝django 1.7.1
django-admin.py --version 查看django的版本
django-admin.py startproject [name] 建置一個django 專案:name
tree mysite 樹狀展開mysite

python manage.py runserver 啟動server (記得切回虛擬環境)(切回manage.py所在目錄)
接著在瀏覽器裡輸入:http://127.0.0.1:8000
就可以看到成功運行的網頁了
我發現網站的檔案並不是放在虛擬環境裡
<補充tree 套件的安裝>
su -
yum install tree
http://www.ahlinux.com/start/base/23132.html
pip unintall [套件名稱]
pip install Django==1.7.1 安裝django 1.7.1
django-admin.py --version 查看django的版本
django-admin.py startproject [name] 建置一個django 專案:name
tree mysite 樹狀展開mysite

python manage.py runserver 啟動server (記得切回虛擬環境)(切回manage.py所在目錄)
接著在瀏覽器裡輸入:http://127.0.0.1:8000
就可以看到成功運行的網頁了
我發現網站的檔案並不是放在虛擬環境裡
<補充tree 套件的安裝>
su -
yum install tree
http://www.ahlinux.com/start/base/23132.html
[Django]虛擬環境的使用
虛擬環境主要應用情形有兩種
1.如果同時有很多個python專案在進行,而每個專案需要的環境都不同(可能套件版本不同
2.有十個人一起開發一個大型的專案,確保每個人開發環境都相同
(可能有使用windows, linux, mac 的人要一起合作)
其中一個解決方法是虛擬環境
python的虛擬環境可以在同一個系統上建立各自獨立且乾淨的開發環境,並且彼此間不互相影響,免去相依性或衝突的問題,專心於開發及維護。
pip install --upgrade pip 更新pip
pip install virtualenv 安裝virtualenv這個虛擬環境套件
virtualenv [name] 建立一個name的虛擬環境
我們可以在當前的位置看到一個名為test_env 的目錄
其中它包含了bin,lib,include三個資料夾, lib64的連結檔, pip-selfcheck.json

source test_env/bin/activate 啟動虛擬環境
deactivate 解除虛擬環境
如果再也用不到的虛擬環境可以直接將test_env整個目錄刪除
回到一開始的問題
情境1. 我們可以為每個專案都準備一個虛擬環境 在虛擬環境間切換
情境2. 將建立好的虛擬環境統一分配給所有人
分配方法有下:
1.打包虛擬環境的目錄
2.使用pip freeze 指令將套件列表輸出到requirements.txt
其他人也用pip freeze 來讀取requirements.txt安裝
[Linux]centos 7.0 下 pip 的安裝
首先,centos 7.0 已經有內建python
python --version 查詢自己的版本
再來是安裝pip
pip是python 的套件管理工具,集合了下載、安裝、管理、移除套件等功能
開始安裝吧
su - 切換至系統管理員
https://www.liquidweb.com/kb/how-to-install-pip-on-centos-7/
從這個網站知道
Pip is part of Extra Packages for Enterprise Linux (EPEL), which is a community repository of non-standard packages for the RHEL distribution. First, we’ll install the EPEL repository:
所以我們先輸入
yum install epel-release 安裝EPEL
yum install python-pip 安裝pip
成功安裝
python --version 查詢自己的版本
再來是安裝pip
pip是python 的套件管理工具,集合了下載、安裝、管理、移除套件等功能
開始安裝吧
su - 切換至系統管理員
https://www.liquidweb.com/kb/how-to-install-pip-on-centos-7/
從這個網站知道
Pip is part of Extra Packages for Enterprise Linux (EPEL), which is a community repository of non-standard packages for the RHEL distribution. First, we’ll install the EPEL repository:
所以我們先輸入
yum install epel-release 安裝EPEL
yum install python-pip 安裝pip
成功安裝
2016年11月7日 星期一
[windows 安全]遠端連線 資料清除
因為需要在外面連回家裡的windows server 工作
所以開啟了遠端桌面
但是windows 會把每次的連線紀錄記起來
需要手動刪除
遠端桌面紀錄主要儲存在兩個位置
1.HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default 下的MRU0,MRU1......
2.c:/Users/[user_name]/Documents/Default.rdp
底下是*.bat 的程式碼
只能從桌面運行
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" /v "MRU0" /f
::刪除機碼1
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" /v "MRU1" /f
::刪除機碼2
cd..
::從桌面切換至上層目錄
cd Documents
::切換至Documents
attrib -h -r -s Default.rdp
::更改檔案屬性
del Default.rdp
::刪除遠端資料檔
shutdown /r /t 60 /c "Clear rdp"
::/r 重新啟動
::/t 60 60秒後
::/c "comment"
2016年10月7日 星期五
cookie的使用
今天主要是來寫寫cookie
首先 什麼是cookie呢
cookie是一種存在瀏覽器內的資料
方便網站去記得使用者
def set_c(request):
response = HttpResponse('set you lucky number as 8')
response.set_cookie('lucky number',8)
return response
def get_c(request):
if 'lucky number' in request.COOKIES:
return HttpResponse('Your lucky number is {0}'.format(request.COOKIES['lucky number']))
else:
return HttpResponse('NO COOKIES')
但是get_c 沒有抓到cookie ,明天研究
這邊有個寫法
print("%d %d"&('1','2')-----------1 2-------------old style
print("{} {}".format(1,2)---------1 2-------------new style
print("{1} {0}".format(1,2)------2 1-------------only for new style
裡面的數字可以對外面排序
首先 什麼是cookie呢
cookie是一種存在瀏覽器內的資料
方便網站去記得使用者
def set_c(request):
response = HttpResponse('set you lucky number as 8')
response.set_cookie('lucky number',8)
return response
def get_c(request):
if 'lucky number' in request.COOKIES:
return HttpResponse('Your lucky number is {0}'.format(request.COOKIES['lucky number']))
else:
return HttpResponse('NO COOKIES')
但是get_c 沒有抓到cookie ,明天研究
這邊有個寫法
print("%d %d"&('1','2')-----------1 2-------------old style
print("{} {}".format(1,2)---------1 2-------------new style
print("{1} {0}".format(1,2)------2 1-------------only for new style
裡面的數字可以對外面排序
訂閱:
文章 (Atom)



