You are on page 1of 92

Gii

thiu
Hin nay, Python l mt trong nhng ngn ng lp trnh
ang c ch bi tnh a dng v ng dng, th vin
phong ph v cng ng ng o.

lm vic vi PHP 10 nm, v c nhng tc v m PHP


kh m thc hin ti u c, khin mnh phi tip cn vi
Python trong giai on ny.

Cun sch nh ny c vit trong qu trnh mnh bt u


hc Python v gii quyt cc bi ton c bn theo nhu cu
ca mnh.

Hy vng nhng ghi chp ca mnh cng s gip ch cho


nhng ai ang quan tm n vic ng dng Python vo
cng vic v x l hin ti.

Mc lc
Sch c chia lm 15 chng, mi chng s trnh by 1
kha cnh ca Python m mnh s gp phi v s hu ch
khi bit cc kin thc ny trong vic p dng Python vo
cng vic trong tng lai.

1. Hello world
2. C php
3. Phn chia module
4. Class
5. Thao tc trn tp tin
6. X l hnh nh
7. X l file JSON
8. X l file XML
9. Kt ni MySQL
10. Kt ni Redis
11. Kt ni Memcached
12. Kt ni RabbitMQ
13. Restful Client
14. Gi email vi SMTP
15. Socket Programming
Tc gi
Tn: V Duy Tun
Email: tuanmaster2012@gmail.com
Facebook: https://www.facebook.com/voduytuan
Chng 1. Hello world
Python l mt ngn ng phin dch (Interpreter Language),
tc l khng cn build thnh file thc thi m chy trc tip
nh PHP.

Hin ti Python c 2 nhnh chnh l 2.x v 3.x. nhnh 2.x


dng pht trin v ang ng phin bn 2.7. Nhnh
Python 3.x th vn ang c tip tc pht trin.

Website chnh thc ca Python: www.python.org

Ci t
Python h tr hu ht cc nn tng v rt d tm thy sn
trn mt s h iu hnh nh Mac OS

bit l h thng ca bn ci Python cha, c th vo


mn hnh command line v g:

$ python --version
Nu ci t python th s hin th thng tin phin bn
python. Nu bo li th ng ngha vi bn cha ci t
Python.

C th tham kho cch ci t Python ti:


https://www.python.org/downloads/

Cng c pht trin


Ch cn dng mt text editor l bn c th vit c code
python hoc c th dng cc cng c cao cp hn (IDE)
nh Aptana, PyCharmCc IDE thng h tr thm qu
trnh phn tch c php dng lnh, debugtrong phm vi
cun sch nh ny th mnh hng n cch thc thi
python bng dng lnh.

Hello world
To mt file c tn l helloworld.py v c ni dung nh
sau:

print 'Hello world'


print l lnh c bn nht xut mt bin ra (thng l
mn hnh)

Sau , vo mn hnh command line, di chuyn n th


mc cha file ny v g.

$ python helloworld.py

Nu thy xut hin dng ch Hello world tc l bn


hon thnh vic vit ng dng python u tin.
Chng 2. C php
2.1. Bin s
Khai bo bin bng mt cu lnh gn.

a = 1

bn c th gn nhiu loi gi tr (s, chui) cho mt bin.

a = 1
a = 'Hello World'
a = [1, 2, 3]
a = [1.2, 'Hello', 'W', 2]

2.2. Ton t s hc
Python cng h tr mt s ton t ton hc thng dng
nh:

+ php cng
- php tr

* php nhn

/ php chia

% php chia ly d (modulo)

2.3. Boolean v Ton t logic


Gi tr ng v sai tng ng l True v False .

not o gi tr.

and php tnh logic v (AND)

or php tnh logic hoc (OR)

Mt s php so snh thng thng nh < (b hn), <= (b


hn hoc bng), > (ln hn), >= (ln hn hoc bng), ==
(bng), != (khc) so snh 2 gi tr.

H tr dng so snh kp nh:


x = 2

1 < x < 3 # True
10 < x < 20 # False
3 > x <= 2 # True
2 == x < 4 # True

Ton t kim tra phn t trong mt tp hp: - in kim tra


c tn ti - not in kim khng tn ti

'good' in 'this is a greate example' # F


alse
'good' not in 'this is a greate example' # True

2.4. Cu trc iu khin


Python h tr mt s cu trc iu khin thng dng. Hu
ht cc cu trc iu khin u da vo tht u dng
(indention) to thnh mt block x l, thay v s dng
{ } nh cc ngn ng khc (PHP, Javascript) ### 2.4.1.
Ifelifelse
if condition1 :
indentedStatementBlockForTrueCondition1
elif condition2 :
indentedStatementBlockForFirstTrueCondition2
elif condition3 :
indentedStatementBlockForFirstTrueCondition3
elif condition4 :
indentedStatementBlockForFirstTrueCondition4
else:
indentedStatementBlockForEachConditionFalse

2.4.2. Switchcase

Python khng c cu trc switch case

2.4.3. Forin

for iterating_var in sequence:


statements(s)

V d:
for letter in 'Python': # First Example
print 'Current Letter :', letter

fruits = ['banana', 'apple', 'mango']


for fruit in fruits: # Second Example
print 'Current fruit :', fruit

print "Good bye!"

Kt qu hin th ca v d trn:

Current Letter : P
Current Letter : y
Current Letter : t
Current Letter : h
Current Letter : o
Current Letter : n
Current fruit : banana
Current fruit : apple
Current fruit : mango
Good bye!

2.4.4. While
while expression:
statement(s)

V d:

count = 0
while (count < 9):
print 'The count is:', count
count = count + 1

print "Good bye!"

Kt qu hin th ca v d trn:
The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!

2.5. Hm
Khai bo hm theo c php:

def functionname(param, param2,..):


statements(s)

Hm nu khng tr d liu th mc nh s tr v gi tr
None

V d khai bo hm tnh v tr v gi tr tng ca 2 tham


s u vo:
def sum(a, b):
return (a+b)

Cch gi hm:

sum(1, 2)
(tr v gi tr l 3)

Hm c h tr gi tr mc nh cho tham s khi khng


truyn vo. V d hm sau:

def plus(c, d = 10):


return (c+d)

Nu gi hm trn nh sau:

plus(2)
(kt qu tr v l 12)

Mt khc bit trong cch gi hm ca Python so vi PHP


l chng ta c th thay i th t tham s truyn vo bng
cch t tn tham s khi gi hm. V d ta c th gi hm
sum(a,b) v d trn bng cch truyn tham s b trc a
nh sau:

sum(b = 1, a = 10)

2.6. X l chui
Mt chui c th khai bo bng du nhy i " hoc n
' . V d cc chui sau:

str1 = "Hello"
str2 = 'world'

C th truy xut tng k t trong mt chui theo hnh thc


index, v d: str1[0] , str1[1]
C th s dng 3 du nhy (i hoc n) khai bo
chui trn nhiu dng. V d:
paragraph = """This is line 1
This is line 2
This is line 3"""

2.6.1. Ni chui

C th to mt chui di t vic ni cc chui li theo c


php:

str = str1 + " " + str2

2.6.2. Trch xut chui con

C th to cc chui con thng qua ton t ly khon


[start:end] (range). Mc nh start l t v tr u chui
( 0 ) v end l n v tr cui chui. V d:
str = 'Hello world'

print str[0:4]
(Hin th "Hell")

print str[:4]
(Hin th "Hell")

print str[-3:]
(Hin th "rld")

print str[6:-3]
(Hin th "wo")

2.6.3. Ly di ca chui

S dng hm len(...) tr v di ca chui. V d:

count = len("Hello world")


(count c gi tr 11)

2.6.4. Tm & thay th ni dung

C th tm v thay th trong chui bng cch gi phng


thc replace(search, replace[, max]) ca mt chui. V
d:

str = 'Hello world'


newstr = str.replace('Hello', 'Bye')
print newstr
(S hin th chui "Bye world" trn mn hnh)

2.6.5. Tm v tr chui con

C th tm v tr ca mt chui con trong chui ln bng


cch gi phng thc find(str, beg=0
end=len(string)) . Bt u l v tr 0 , nu khng tm ra th
tr v -1 . V d:

str = 'Hello world'


print str.find('world')
(hin th 6)

print str.find('Bye');
(hin th -1)

Hm find() s tm theo th t t tri qua phi ca chui,


tc l t ln xut hin u tin. C th dng hm rfind()
tm theo v tr t cui chui v pha trc.

2.6.6. Tch chui

C th tch chui da theo mt chui delimeter bng cch


gi phng thc split(str="", num=string.count(str)) .
V d:

str = 'Hello world'


print str.split(' ')
(Tr v mt mng c 2 phn t l 2 chui "Hello" v
"world")

C th s dng hm splitlines() tch chui theo


tng hng v loi b k t NEWLINE.

2.6.7. Trim k t khong trng

C th loi b cc k t (mc nh l k t khong trng)


trc v sau mt chui, bng cch gi cc phng thc
sau:
strip([chars]) : loi b trc v sau chui

lstrip([chars]) : loi b pha trc chui

rstrip([chars]) : loi b pha sau chui

2.6.8. Mt s hm x l chui

isnumeric() : Kim tra mt chui c phi l chui s

lower() : Chuyn chui ht thnh ch thng

upper() : Chuyn chui ht thnh ch HOA

2.7. List
List trong Python l cu trc mng v cc phn t c index
c th t. Khng nh PHP, key ca mt mng c th va
l s, va l chui (associated array).

Trong Python, mun to mt mng c key l chui th s


s dng cu trc Dictionary (phn tip tip). Trong phn
ny, chng ta s ni n List. Mt List c khai bo nh
mng trong JSON. S dng [..] khai bo mt mng.
V d:
numbers = [1, 2, 3, 4, 5]
names = ['Marry', 'Peter']

C th truy xut tng phn t ca mng bng index, phn


t u tin c th t l 0 . V d:

print numbers[0]
(Hin th 1)

print numbers[-3]
(Hin th 3)

print names[1]
(Hin th 'Peter')

bit c s lng phn t ca 1 List, c th s dng


hm len(array) ly s lng phn t ca mng tham
s truyn vo.

2.7.1. Kim tra s tn ti ca mt phn t

2.7.1.1. Kim tra theo Index


Trong nhiu trng hp bn mun truy xut mt phn t
bt k (da vo index) ca mng th nu truy xut n mt
phn t khng tn ti th ng dng s bo li. Do , trc
khi truy xut mt phn t, bn cn kim tra xem phn t
ny tn ti hay cha. Hin ti python khng h tr hm
no kim tra s tn ti ca mt phn t trong mng.

C 2 cch thng thy kim tra l Look before you


leap (LBYL) v Easier to ask forgiveness than
permission (EAFP).

V d v Look before you leap (LBYL):

if index < len(array):


array[index]
else:
# handle this

V d v Easier to ask forgiveness than permission


(EAFP):
try:
array[index]
except IndexError:
# handle this

2.7.1.2. Kim tra theo gi tr

kim tra mt gi tr c tn ti / khng tn ti trong


mng hay khng th c th s dng ton t in / not in . V
d:

mylist = ['a', 'b', 'c']



print 'a' in mylist
(Hin th True)

print 'b' not in mylist
(Hin th False)

2.7.2. Trch xut mng con

Tng t nh chui, t th to cc mng con thng qua


ton t ly khon [start:end] (range). Mc nh start l
t v tr u chui ( 0 ) v end l n v tr cui chui. V d:

numbers = ['a', 'b', 'c', 'd']



print numbers[:2]
(Hin th ['a', 'b'])

print numbers[-2:]
(Hin th ['c', 'd'])

2.7.3. Xa phn t ca mng

C th xa mt phn t thng qua ton t del . Th t ca


cc phn t s dch chuyn ty vo v tr ca phn t b
xa. V d:

numbers = [1, 2, 3, 4, 5]
del numbers[0]
print numbers
(Hin th [2, 3, 4, 5])

Bn c th xa mt khon da vo ton t ly khon


[start:end] . V d:
numbers = [1, 2, 3, 4, 5, 6, 7]
del numbers[2:4]
print numbers
(Hin th [1, 2, 5, 6, 7])

2.7.4. Ni 2 mng

Bn c th s dng ton t + ni gi tr ca 2 mng v


to ra mt mng ln c s lng phn t l tng s lng
phn t ca 2 mng con. V d:

a = [1, 2]
b = [1, 3]

print a + b
(Hin th [1, 2, 1, 3])

2.7.5. Thm phn t vo mng

Nu bn mun thm phn t vo mt mng tn ti, hy


dng phng thc list.append(newvalue) thm phn
t c gi tr newvalue vo cui mng list . V d:
numbers = [1, 2, 3]
numbers.append(4)
print numbers
(Hin th [1, 2, 3, 4]

2.7.6. Ly phn t cui mng

Nu mun ly phn t cui cng ca mng ra khi mng,


c th s dng phng thc list.pop() , s tr v gi tr
ca phn t cui cng v mng by gi s khng cn phn
t ny.

numbers = [1, 2, 3]
mynumber = numbers.pop()
print mynumber
(Hin th 3)

print numbers
(Hin th [1, 2])

2.7.7. Tm mt gi tr trong mng

Nu bn mun tm v tr (index) ca mt gi tr trong mt


mng, c th dng phng thc list.index(obj) . Nu
tm thy s tr v index ca phn t u tin tm thy. Nu
khng tm thy s qung Exception. V d:

aList = [123, 'xyz', 'zara', 'abc'];

print "Index for xyz : ", aList.index('xyz')


print "Index for zara : ", aList.index('zara')

Khi chy s hin th kt qu:

Index for xyz : 1


Index for zara : 2

2.7.8. o ngc gi tr ca mng

o ngc th t cc gi tr ca mt mng, s dng


phng thc list.reverse() . Phng thc ny khng tr
v kt qu m thay i trc tip mng list . V d:
numbers = [1, 2, 3, 4]
numbers.reverse()
print numbers
(Hin th [4, 3, 2, 1])

2.7.9. Sp xp gi tr cc phn t

sp xp th t ca gi tr trong mng, s dng phng


thc list.sort([func]) sp xp. Nu tham s u
vo l hm func khng truyn vo th mc nh l sp xp
theo gi tr tng dn. Phng thc ny khng tr v kt
qu m thay i trc tip mng list . V d:

aList = [123, 'xyz', 'zara', 'abc', 'xyz']


aList.sort()
print "List : ", aList
(Hin th List : [123, 'abc', 'xyz', 'xyz', 'zara'
])

Cch trin khai hm compare func() cng ging nh hm


usort trong PHP. Hm tr v cc gi tr 0 , -1 v 1 .
2.8. Tuple
Tuple cng l mt cu trc mng, tng t nh cu trc
List. Mt s im khc nhau c bn l khai bo Tuple s
dng cp du ngoc (...) v mt tuple c khai bo
ri th khng thay i c gi tr (immutable) v khng h
tr cc phng thc nh append() , pop() V d:

mytuple = ('x', 'y', 'z')


print mytuple
(Hin th ('x', 'y', 'z'))

Vn h tr cc cch truy xut phn t ging List nh l


truy xut theo index, range, tm kim

2.9. Dictionary
Dictionary cng l mt cu trc mng, nhng cc phn t
bao gm key v value. Nu bn c bit JSON th cu trc
Dictionary tng t nh mt object json. Mt Dictionary
c khai bo bng cp du ngoc {...} . V d:
point = {'x': 1, 'y': 2}

Truy xut mt gi tr da vo key ca i tng. V d:

point = {'x': 3, 'y': 6, 'z' : 9}


print point[x]
(Hin th 3)

2.9.1. Thm mt phn t

thm mt phn t vo i tng khai bo, s dng


cu trc dict[key] = value . V d:

user = {'name': 'Jone', 'age': 30}


user['country'] = 'Vietnam'
print user
(Hin th {'country': 'Vietnam', 'age': 30, 'name':
'Jone'})

2.9.2. Mt s hm, phng thc thng dng:

dict.clear() : Xa ton b d liu bn trong i


tng
dict.copy() : Tr v mt bn copy ca i tng

dict.fromkeys(seq[, value]) : To mt i tng vi

danh sch key t seq v nu c truyn value th ly


lm gi tr cho cc phn t.
dict.has_key(key) : kim tra mt key c tn ti trong

i tng hay khng.


dict.keys() : Tr v mt List cha cc key

dict.values() : Tr v mt List cha cc value


Chng 3. Phn chia module
Tt c v d cho n thi im ny u c thc thi trong
command line hoc t mt file python .py . Tuy nhin, i
vi cc ng dng ln, c nhiu chc nng th phn chia nh
d n thnh cc file khc nhau s gip d bo tr v ti s
dng cc thnh phn thit k.

Chng ny s gip bn thit k cc tnh nng theo m


hnh cc module v khi cn th s gi file tng ng v s
dng.

3.1. Cc loi module / th vin


C 3 loi module thng thy l:

1. Vit bng Python: c phn m rng l .py


2. Cc th vin lin kt ng: c phn m rng l .dll ,
.pyd , .so , .sl ,

3. C-Module lin kt vi trnh phin dch.


3.2. ng dn tm load module
ti mt module vo script ca bn, s dng c php
n gin:

import modulename

khi gp cu lnh trn th trnh bin dch s tin hnh tm


kim file module tng ng theo th t th mc sau:

1. Th mc hin hnh m script ang gi


2. Cc th mc trong PYTHONPATH (nu c set)
3. Cc th mc ci t chun trn Linux/Unix..

C th bit c ng dn m mt module c load


bng on code di y:
import math
math.__file__
(V d tr v '/usr/lib/python2.5/lib-dynload/math.
so')

import random
random.__file__
(V d tr v '/usr/lib/python2.5/random.pyc')

3.3. Ly danh sch thuc tnh v phng


thc ca mt module
ly c danh sch cc thuc tnh v phng thc m
module h tr, s dng hm dir(modulename) . V d:
dir(math)
['__doc__', '__file__', '__name__', '__package__',
'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2',
'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degree
s', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'fa
ctorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma'
, 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'lo
g', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians
', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']

C th gi hm dir() khng truyn tham s ly cc


thuc tnh v phng thc ca scope hin ti ang thc
thi.

3.4. Cch khai bo v s dng module


Gi s bn to mt file python mymath.py c ni dung nh
sau:
def cong(a, b):
return a + b

def tru(a, b):
return a - b

def nhan(a, b):
return a * b

Sau , to mt file c tn myexample.py , trong cng th


mc vi file mymath.py va to trn, c ni dung nh
sau:

import mymath

num1 = 1
num2 = 2

print 'Tong hai so la: ', mymath.cong(num1, num2)

Vo command line, thc hin gi file myexample nh sau:


$ python myexample.py

Sau khi thc hin s hin th ln mn hnh l

Tong hai so la: 3

3.5. Package module


C th gom nhiu module .py vo mt th mc v tn th
mc l tn ca package v to mt file __init__.py trong
th mc ny.

Nh vy, cu trc th ca mt package s nh sau:

|-- mypack
| |-- __init__.py
| |-- mymodule1.py
| |-- mymodule2.py
|

C th s dng mymodule1 theo c php import sau:


import mypack.mymodule1

hoc

import mypack.mymodule1 as mymodule1

hoc

import mypack.mymodule1 as mod

Khi s dng mt module thuc mt package th cc lnh


trong file __init__.py s c thc hin trc. Thng
thng th file __init__.py s rng.

C th to cc subpackage bn trong mt package theo


ng cu trc th mc, c file __init__.py . V d:

import mypack.mysubpack.mysubsubpack.module
Chng 4. Class
Lp trnh hng i tng l mt khi nim khng th
thiu trong hu ht cc ngn ng thng dng hin nay.
Python cng h tr lp trnh hng i tng vi cc khi
nim Class, Object, Override

4.1. Khai bo mt Class


Khai bo mt class theo c php sau:

class myclass([parentclass]):
assignments
def __init__(self):
statements
def method():
statements
def method2():
statements

V d mt class:

class animal():
name = ''
name = ''
age = 0
def __init__(self, name = '', age = 0):
self.name = name
self.age = age
def show(self):
print 'My name is ', self.name
def run(self):
print 'Animal is running...'
def go(self):
print 'Animal is going...'


class dog(animal):
def run(self):
print 'Dog is running...'

myanimal = animal()
myanimal.show()
myanimal.run()
myanimal.go()

mydog = dog('Lucy')
mydog.show()
mydog.run()
mydog.go()
Sau khi thc thi s cho ra kt qu:

My Name is
Animal is running...
Animal is going...
My Name is Lucy
Dog is running...
Animal is going...

Trong v d trn th:

animal v dog l 2 class. Trong class dog k tha

t class cha l animal nn s c cc phng thc ca


class animal .
name v age l thuc tnh (Attribute) ca class.

Phng thc __init__(self) l hm to ca class.


Hm ny s c gi mi khi c mt object mi c
to (t mt class), gi l qu trnh to instance.
show() , run() v go() l 2 phng thc ca 2 class.

Khi khai bo phng thc c km tham s self dng


truy cp ngc li object ang gi. Lc gi phng
thc th khng cn truyn tham s ny.
Phng thc run() ca class dog gi l override
ca phng thc run() ca class animal .
Chng 5. Thao tc trn tp tin
v Th mc
Ni dung chng ny s hng dn cc thao tc lin quan
n tp tin v th mc.

5.1. Tp tin (File)


5.1.1. M file

Trc khi mun c hoc ghi file, bn cn c thao tc m


file theo c php:

fh = open(filepath, mode)

Trong , filepath l ng dn ca file s m v mode


l ch m. C mt s ch l:

r : m c ni dung (mc nh)

w : m ghi ni dung

a : m ghi thm ni dung vo cui file.


r+ : m c v ghi. Con tr nm u file.

w+ : m c v ghi. Ghi nu file tn ti, nu

file cha tn ti th to file mi ghi.


a+ : m c v thm vo cui file. Con tr nm

cui file. Nu file cha tn ti th to file mi ghi.

Mc nh l m file text, nu mun m file nh phn


(binary) th thm b , v d: rb , wb , ab , rb+ , wb+ , ab+ .

V d:

f1 = open('test.txt', 'r')
f2 = open('access_log', 'a+'

Sau khi gi hm open() thnh cng th s tr v mt


object c cc thuc tnh:

closed : True nu file ng

mode : ch khi m file

name : tn ca file

softspace : c nh du softspace khi dng vi hm


print

5.1.2. c ni dung t file

Sau khi file m ch c th gi phng thc


read([count]) tr v ton b ni dung ca file. V d:

f1 = open('test.txt', 'r')
data = f1.read();

Hm read() c nhn mt tham s l s lng byte mun


c. Nu khng truyn vo th s c ht ni dung ca file.
V d:

f2 = open('log.txt', 'r')
buffdata = f2.read(1024)

5.1.3. Ghi ni dung vo file

Nu file c m ch c th ghi th c th dng


phng thc write() ghi mt ni dung vo file. V d:
f2 = open('access_log', 'a+')
f2.write('Attack detected')

5.1.4. ng file m

Sau khi hon tt cc thao tc c ghi file th gi phng


thc close() ng file m. V d:

f1.close()
f2.close()

5.1.5. i tn file

S dng phng thc os.rename(old, new) i tn


mt file. V d:

import os
os.rename('test.txt', 'test_new.txt')

5.1.6. Xa file

S dng phng thc os.remove(file) xa mt file


khi h thng. V d:

import os
os.remove('test.txt')

5.2. Th mc (Directory)
5.2.1. To th mc

S dng phng thc os.mkdir(dir) to th mc. V


d:

import os
os.mkdir('test')

5.2.2. Xa th mc

S dng phng thc os.rmdir(dir) xa mt th mc.


V d:

import os
os.rmdir('test')
5.2.3. c ni dung th mc

S dng phng thc os.listdir(dir) ly danh sch


tp tin, th mc ca th mc dir . Khi gi s tr v mt
mng danh sch cc tp tin, th mc. V d:

import os
allfiles = os.listdir('/root/downloads')
print allfiles

5.3. Module os
Module os l mt module c nhiu phng thc hu ch
trong vic lm vic vi cc file v directory, nh:

os.chdir(path) : i th mc hin hnh

os.getcwd() : tr v th mc hin hnh

os.chmod(path, mode) : CHMOD mt ng dn

os.chown(path, uid, gid) : CHOWN mt ng dn

os.makedirs(path[, mode]) : to ng dn (c

recursive)
os.removedirs(path) : xa mt ng dn (c

recursive)

Xem thm ti https://docs.python.org/2/library/os.html

5.4. Module os.path


Module os.path h tr cc phng thc gip thao tc
nhanh chng v thun tin hn trn ng dn.

os.path.exists(path) : kim tra 1 ng dn c tn

ti hay khng
os.path.getsize(path) : ly file size (byte)

os.path.isfile(path) : kim tra xem c phi l mt

file thng thng


os.path.isdir(path) : kim tra xem c phi l mt

th mc
os.path.dirname(path) : tr v tn th mc ca path

os.path.getatime(path) : tr v thi gian truy cp

mi nht
os.path.getmtime(path) : tr v thi gian chnh sa

cui cng
os.path.getctime(path) : tr v thi gian chnh sa

cui ca metadata trn mt s h thng. Hoc tr v


thi gian to file trn Windows.

Xem thm ti
https://docs.python.org/2/library/os.path.html
Chng 6. X l hnh nh
S dng th vin Pillow (PIL Fork) tin hnh cc thao
tc x l hnh nh n gin nh resize, crop, rotate

6.1. Ci t PIL
Vo trang web sau download / ci t package PIL cho
python ca bn
http://pillow.readthedocs.org/en/latest/installation.html

Sau khi ci t th c th s dng cc module trong


package IPL

from PIL import Image

6.2. M file
from PIL import Image
im = Image.open("photo.jpg")
Sau khi m file hnh thnh cng th c th thao tc trn i
tng im .

6.3. Ghi file


T i tng Image c th lu file xung my tnh bng
phng thc save(path, type) . V d:

...
im.save('photo_new.jpg', 'JPEG')

6.4. To thumbnail
S dng phng thc thumbnail nh sau:

from PIL import Image


im = Image.open('photo.jpg')
im.thumbnail((100, 100))
im.save('photo_thumbnail.jpg', 'JPEG')

thumbnail khng tr v image mi m thc hin trn


object image ang gi.
6.5. Cc thao tc x l hnh nh
Tham kho thm th vin PIL ti:
http://pillow.readthedocs.org/en/latest/index.html
Chng 7. X l file JSON
JSON l mt trong nhng nh dng file trao i d liu
thng dng nht hin nay. Vi kin trc n gin v tng
ng vi cu trc ca Python nn vic thao tc JSON trn
Python rt d hiu.

7.1. Load file t Internet


Thng thng d liu JSON c ly t ngun khc (nh
file, internet..) nn chng ny s bt u bng cch
hng dn download mt file JSON t Internet v sau
mi parsing ni dung JSON download.

S dng module urllib2 download file v module


json encode/decode JSON data. V d:
import urllib2
import json

response = urllib2.urlopen('https://api.github.com/
users/voduytuan/repos')

data = json.load(response)

print data

V d trn s truy vn ng dn
https://api.github.com/users/voduytuan/repos ly danh
sch Repository trn Github ca mnh di nh dng
JSON. Sau , s c

7.2. Parsing JSON Data


Nu nh bn c JSON data di dng chui, mun
parsing chui ny thnh Data th s dng nh cch di
y:
import json

mystring = '{"a":1,"b":2,"c":3,"d":4,"e":5}'
data = json.loads(mystring)
print data
(Hin th: {u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd
': 4})

7.3. Encoding JSON Data


Nu nh bn c mt bin v mun encode thnh JSON
string th c th dng theo cch sau:

import json

mydata = {
'name': 'John',
'age': 10
}
jsonstring = json.dumps(mydata)
print jsonstring
(hin th: {"age": 10, "name": "John"})
Chng 8. X l file XML
Trong phn ny, chng ta s parsing ni dung XML thnh
d liu x l. x l XML, ta s s dng th vin
Beautifulsoup 4. y l mt th vin gip vic trin khai
vic parsing html, xml c nhanh chng v tin li.

8.1. Ci t Beautifulsoup
Bn c th tham kho hng dn cch ci t ti website
http://www.crummy.com/software/BeautifulSoup/bs4/doc/#ins
beautiful-soup.

Trn MacOS, c th ci bng pip nh sau:

$ sudo pip install beautifulsoup4

8.2. Ci t lxml parser


parsing xml t beautifulsoup, tao s dng b parser
xml c tn l lxml . Xem hng dn ci t ti
http://www.crummy.com/software/BeautifulSoup/bs4/doc/#ins
a-parser

Trn MacOS, c th ci bng pip nh sau:

sudo pip install lxml

8.3. V d v parsing XML


Cho v d sau:

from bs4 import BeautifulSoup as Soup

note = '''
<?xml version="1.0" encoding="UTF-8"?>
<breakfast_menu>
<food>
<name>Belgian Waffles</name>
<price>$5.95</price>
<description>Two of our famous Belgian Waff
les with plenty of real maple syrup</description>
<calories>650</calories>
</food>
<food>
<name>Strawberry Belgian Waffles</name>
<name>Strawberry Belgian Waffles</name>
<price>$7.95</price>
<description>Light Belgian waffles covered
with strawberries and whipped cream</description>
<calories>900</calories>
</food>
</breakfast_menu>
'''

soup = Soup(note, 'xml')

foods = soup.findAll('food')

for x in foods:
print x.find('name').string, ': ', x.price.stri
ng

Khi chy th s hin th ra mn hnh nh sau:

Belgian Waffles : $5.95


Strawberry Belgian Waffles : $7.95

i tng thuc class Soup (BeautifulSoup) s gip truy


xut cc thnh phn ca file xml nhanh chng v tin li.
Trong v d c mt s cch truy xut n cc phn t nh:

findAll() : tr v mng cc th c tn cn tm

find() : tr v phn t u tin c tn cn tm

Truy xut trc tip thng qua tn th nh


x.price.string

8.4. Parsing HTML


Tng t nh xml , BeautifulSoup c th parsing ni dung
HTML thng qua hm khi to v chn html tham s
th 2.

...
soup = Soup(websitehtml, 'html')
Chng 9. Kt ni MySQL
MySQL l mt h c s d liu quan h ph bin nht hin
nay. Rt nhiu ngn ng c th kt ni n MySQL v
Python cng khng ngoi l.

Mc nh Python khng c th vin kt ni n MySQL


server. Trong phn ny, kt ni n MySQL Server t
Python, chng ta s s dng module MySQLdb

9.1. Ci t MySQLdb
Ci t thng qua pip nh sau:

$ sudo pip install MySQL-python

Tham kho thm ti: https://pypi.python.org/pypi/MySQL-


python/1.2.5

Khai bo module MySQLdb l c th s dng.


import MySQLdb

Trong mt s trng hp ci MySQLdb nhng import


bo li thiu file libmysqlclient.18.dylib . Nguyn nhn
c th l do hin ti ng dn n file khng tn ti. Th
to symlink hoc s dng cu lnh sau to symlink t
file libmysqlclient.18.dylib n th mc /usr/lib/

$ sudo ln -s /usr/local/mysql/lib/libmysqlclient.18
.dylib /usr/lib/libmysqlclient.18.dylib

9.2. Kt ni n MySQL Server


Bn cn c mt MySQL server ang chy v cho kt ni
n. Trong trng hp ny l localhost nn khng cn cu
hnh c bit, ch cn cung cp username v password l
c th kt ni n MySQL Server.

Thc hin gi hm nh sau tr v kt ni:


import MySQLdb

dbcon = MySQLdb.connect(host = 'localhost', user =
'myusername', passwd = 'mypassword', db = 'mydbname
')

Nu kt ni khng thnh cng th s bo li v ngng


chng trnh. Cch kt ni an ton l a vo trong try
bt li nh sau:
import MySQLdb

db = None

try:
db = MySQLdb.connect(host = 'localhost', user =
'root', passwd = 'root', db = 'mysql')

except MySQLdb.Error, e:
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)

if db:
cur = db.cursor()
cur.execute("SELECT VERSION()")
ver = cur.fetchone()
print "Database version : %s " % ver

9.3. Kt ni vi charset utf8


Mc nh kt ni n MySQL server l charset latin nn
khi ly d liu unicode th hin th Ting Vit khng ng,
bn cn phi chn charset l utf8 khi to kt ni. C php
nh sau:
...
db = MySQLdb.connect(host = 'localhost', user = 'ro
ot', passwd = 'root', db = 'test', charset = 'utf8'
)

9.4. Query d liu


truy vn d liu (chy cu lnh SQL) th s dng cursor
ca MySQLdb. V d:

import MySQLdb

db = MySQLdb.connect(host = 'localhost', user = 'ro
ot', passwd = 'root', db = 'mysql');
cursor = db.cursor()
sql = 'SELECT * FROM user'
cursor.execute(sql)
myusers = cursor.fetchall()

V d d liu bin myusers l: ((1, 'John'), (2, 'Doe'))

Mc nh, cursor s tr v mi dng d liu t MySQL


theo kiu tuple , tc l khng c key. Nu bn mun tr v
kiu Dictionary th c th khai bo:

import MySQLdb

db = MySQLdb.connect(host = 'localhost', user = 'ro


ot', passwd = 'root', db = 'mysql')
cursor = db.cursor(MySQLdb.cursors.DictCursor)
...

9.5. Fetch d liu


C mt s cch fetch d liu thng dng t cursor sau
khi exectute(sql) l fetchone() v fetchall() .

fetchone() : ch fetch mt dng d liu. Nu mun

fetch nhiu dng d liu th c th gi nhiu ln, mi


ln s tr v mt dng d liu. Tt cho trng hp truy
vn rt nhiu d liu mt lc. Nu tr v None tc l
fetch ht d liu t cu truy vn.
fetchall() : fetch ton b d liu truy vn c t

cu truy vn v tr v mt tuple cha cc dng d


liu. Mi phn t ca Tuple c th l mt Tuple khc
hoc l mt Dictionary ty theo ci t bc ly
cursor (Xem phn 9.4).
fetchmany(size) : nm gia 2 kiu fetch trn, c th

quy nh s lng row trong mi ln fetch. Nu fetch


ht th tr v Tuple rng.

9.6. ng kt ni
Sau khi kt ni v truy vn th c th ng kt ni theo v
d sau:

import MySQLdb

db = MySQLdb.connect(...)
db.close()

Ngoi ra, bn cng nn ng cursor khi khng cn s


dng theo v d:
import MySQLdb

db = MySQLdb.connect(...)
cursor = db.cursor()
cursor.close()
db.close()

9.7. Prepared Statement


Prepared statement l k thut tham s ha cc d liu
truyn vo cu truy vn thay v ni chui trc tip xy
dng mt chui truy vn di. K thut ny c p dng
nhiu v gip tng hiu qu v tnh bo mt ca cu truy
vn. V d:

...
cur.execute("UPDATE Writers SET Name = %s WHERE Id
= %s", ("John", "4"))
...

Mi tham s truy vn s c thay th bng %s v phng


thc execute() s c tham s th 2 l mt Tuple c gi tr
tng ng vi th t xut hin ca cc thnh phn %s
Chng 10. Kt ni Redis
Redis l mt memory cache server h tr persistant data
thng dng nht hin nay. Ni dung chng ny s hng
dn bn kt ni n mt Redis server ( c ci t
sn) thng qua th vin redis-py.

10.1. Ci t
C th xem thm v hng dn ci t th vin ny ti
https://github.com/andymccurdy/redis-py

n gin ci thng qua pip l:

$ sudo pip install redis

10.2 Kt ni n Redis
kt ni n Redis server th bn c th xem v d sau:
import redis

r = redis.StrictRedis(host='localhost', port=6379,
db=0)

10.3. Thc hin lnh


Thc hin cc lnh bnh thng trn i tng redis. V d:

import redis

r = redis.StrictRedis(...)
r.set('foo', 'bar')
print r.get('foo')
(Hin th 'bar')

10.4. Pipeline
Pipeline l k thut c dng trong trng hp bn mun
tng performance bi gp nhiu lnh vo mt request thay
v mi lnh l mt request nh thng thng. Xem v d
sau hiu cch s dng pipeline bng redis-py :
import redis

r = redis.StrictRedis(...)
r.set('foo', 'bar')
pipe = r.pipeline()
pipe.set('a', 1)
pipe.set('b', 2)
pipe.set('c', 3)
pipe.get('foo')
pipe.execute()

Sau khi gi phng thc execute() th s tr v List tng


ng vi cc kt qu ca tng lnh. V d kt qu t on
code trn:

[True, True, True, 'bar']


Chng 11. Kt ni
Memcached
Memcached l mt memory cache server thng dng hin
nay. Ni dung chng ny s hng dn bn kt ni n
mt Memcached server ( c ci t sn) thng qua
th vin pylibmc .

11.1. Ci t
C th xem thm v hng dn ci t th vin ny ti
http://sendapatch.se/projects/pylibmc/install.html

n gin ci thng qua pip l:

$ sudo pip install pylibmc

11.2 Kt ni n Memcached Server


kt ni n Memcached server th bn c th xem v d
sau:
import pylibmc

mc = pylibmc.Client(["127.0.0.1"], binary=True, beh


aviors={"tcp_nodelay": True, "ketama": True})

10.3. Thc hin lnh


Thc hin cc lnh bnh thng trn i tng memcache.
V d:

import pylibmc

mc = pylibmc.Client(...)
mc.set('foo', 'bar')
print mc.get('foo')
(Hin th 'bar')
Chng 12. Kt ni RabbitMQ
RabbitMQ l mt phn mm cho php xy dng Message
Queue theo protocol AMQP v kh thng dng trn th
gii. kt ni n RabbitMQ trn Python, ta s s dng
th vin pika .

12.1. Ci t
C th xem thm v hng dn ci t th vin ny ti
https://pika.readthedocs.org/en/0.10.0/

n gin ci thng qua pip l:

$ sudo pip install pika

12.2 Gi mt message n Server -


Provider
V d gi mt message n server
import pika

connection = pika.BlockingConnection(pika.Connectio
nParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')

channel.basic_publish(exchange='', routing_key='hel
lo', body='Hello World!')
print " [x] Sent 'Hello World!'"

connection.close()

gi mt message, chng ta cn kt ni n server v


khai bo mt channel, y l channel c tn l hello .
Sau khi khai bo channel, tao tin hnh gi message c
ni dung Hello World! thng qua channel ny, km theo
khai bo routing_key l hello . Routing Key s gip iu
hng message ny n ng cc worker c khai bo
nhn message theo routing key (Consumer)

12.3. Nhn message - Consumer


bc trc, ta to mt message ln queue. bc
ny, ta s khai bo mt worker x l cc message nhn
c t channel hello .

import pika

connection = pika.BlockingConnection(pika.Connectio
nParameters(host='localhost'))
channel = connection.channel()

channel.queue_declare(queue='hello')

print ' [*] Waiting for messages. To exit press CTR
L+C'

def callback(ch, method, properties, body):
print " [x] Received %r" % (body,)

channel.basic_consume(callback, queue='hello', no_a
ck=True)

channel.start_consuming()

on code ny cng c phn khai bo connection ,


channel . Tuy nhin, v l consumer nn s s dng
phng thc basic_consume lng nghe trn queue
hello , khi c message n s gi hm callback() x
l. Trong trng hp v d ny th callback ch n gin l
hin th chui thng bo nhn c message.

12.4. Tm hiu thm v RabbitMQ v Pika


Ni dung chng ny khng c nh gii thiu tt c khi
nim ca AMQP cng nh RabbitMQ m ch yu gii thiu
th vin pika lm vic vi RabbitMQ. Bn c th tip
tc theo di cc hng dn v khi nim ca RabbitMQ v
Pika ti website chnh thc ca RabbitMQ.

https://www.rabbitmq.com/tutorials/tutorial-one-
python.html
Chng 13. Restful client
Ngy nay, vi s phong ph ca cc ng dng v nhu cu
kt ni ngy cng ln th Restful l mt trong nhng m
hnh web service c nhiu cng ty s dng. Do , vic
c th kt ni n cc Restful web service l mt k nng
cn thit cho cc lp trnh vin.

Chng ny s gii thiu v mt trong nhng th vin ni


ting nht trong Python lm vic vi cc Restful web
service, l requests .

Website chnh thc v cc m t y u c cp


ti http://www.python-requests.org/

13.1. Ci t
Ci t nhanh chng thng qua pip nh sau:

$ sudo pip install requests


13.2. Request
H tr sn cc phng thc tng ng cho Http request
nh GET, POST, PUT, DELETE

import requests

r = requests.get('https://api.github.com/events')
r = requests.post("http://httpbin.org/post")
r = requests.put("http://httpbin.org/put")
r = requests.delete("http://httpbin.org/delete")
r = requests.head("http://httpbin.org/get")
r = requests.options("http://httpbin.org/get")

13.2.1. GET Query string

i vi cc request GET , c th truyn tham s ng dn


thng qua tham s params khi gi phng thc get() . V
d:
import requests

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params =
payload)
print(r.url)
(Hin th: http://httpbin.org/get?key2=value2&key1=
value1)

13.2.2. Request Body

Trong hu ht trng hp cc request nh POST, PUT


thng cn truyn d liu khi request, c th s dng tham
s data truyn data ln km request. V d:

import requests

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data =
payload)

13.2.3. Upload file


C th gi thm tham s files upload file km theo
request. V d:

import requests

url = 'http://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)

13.3. Response
Sau khi gi cc phng thc tng ng request, bn s
c i tng thuc class Response . i tng ny c mt
s thng tin nh sau:

status_code : HTTP Status server tr v

headers : Cc thng tin header m server tr v di

dng Dictionary.
cookies : Nu server c tr v cookie th c th s

dng thuc tnh ny ly cc cookie.


text : Tr v ni dung response
Tham kho v cc tnh nng khc ca th vin requests
ti website chnh thc. http://docs.python-requests.org
Chng 14. Gi email vi SMTP
SMTP l giao thc gi mail thng dng hin nay. Python h
tr mc nh th vin smtplib dng kt ni n mt
SMTP Server v gi email. Tuy nhin, vic s dng th
vin ny s gy kh khn cho vic nh dng v s dng
nn chng ta s s dng th vin sender , l mt th vin
gip nh dng v gi email n gin hn.

14.1. Ci t sender
Ci t t pip nh sau:

$ sudo pip install sender

14.2. Gi email n gin


gi 1 email vi sender , bn cn c ti khon v mt s
thng tin ca SMTP Server trc khi gi. V d on code
gi 1 email t SMTP Server ca Amazon.
from sender import Mail, Message

mail = Mail(
"smtp.gmail.com",
port = 465,
username = "example@gmail.com",
password = "yourpassword",
use_tls = False,
use_ssl = True,
debug_level = False
)

msg = Message("msg subject")
msg.fromaddr = ("Vo Duy Tuan", "example@gmail.com")
msg.to = "destuser@gmail.com"
msg.body = "this is a msg plain text body"
msg.html = "<b>this is a msg text body</b>"
msg.reply_to = "example@gmail.com"
msg.charset = "utf-8"
msg.extra_headers = {}
msg.mail_options = []
msg.rcpt_options = []

# Send message
mail.send(msg)
14.3. Gi email c nh km file
Bn cn s dng thm class Attachment to
attachment.

from sender import Mail, Message, Attachment

mail = Main(...)
msg = Message(..)
...

# Open attached file and create Attachment object
with open("photo01.jpg") as f:
file01 = Attachment("photo01.jpg", "image/jpeg"
, f.read())

msg.attach(file01)

# Send message
mail.send(msg)

14.4. Tm hiu thm


Bn c th tm hiu thm v th vin sender ti website
chnh thc ti a ch http://sender.readthedocs.org/
Chng 15. Socket
programming
Chng ny s v d vic xy dng mt mi trng Client -
Server s dng Socket. Server s lng nghe trn mt port
(12345) v khi client kt ni vo s thng bo hin th
thng tin ca client (IP v Port) v gi 1 message xung
cho client.

15.1. Server side


To file server.py vi ni dung bn di.
import socket

s = socket.socket()
host = socket.gethostname()
port = 12345
s.bind((host, port))

s.listen(5)
while True:
c, addr = s.accept()
print 'Got connection from', addr
c.send('Thank you for connecting')
c.close()

on code trn khi thc thi s chy v lng nghe port


TCP 12345. Mi khi c mt kt ni t client s hin ra
thng bo kt ni t IP v Port no, v d: Got connection
from Got connection from ('192.168.1.104', 60018) .
Sau , gi tr mt message vi ni dung Thank you for
connecting v cho client. Sau , ng kt ni vi client.

15.2. Client side


To file client.py vi ni dung bn di.

import socket

s = socket.socket()
host = '127.0.0.1'
port = 12345

s.connect((host, port))
print s.recv(1024)
s.close

on code trn s kt ni n mt socket server thng


qua hostname ly c t phng thc
socket.gethostname() v port 12345. Sau khi kt ni, s
hin th ra kt qu tr v t server. Sau th ng kt ni.

You might also like