目錄python
1、安裝、編譯與運行正則表達式
2、變量、運算與表達式express
3、數據類型編程
一、數字api
二、字符串數組
三、元組app
四、列表ide
五、字典函數
4、流程控制oop
一、if-else
二、for
三、while
四、switch
5、函數
一、自定義函數
二、Lambda函數
三、Python內置函數
6、包與模塊
一、模塊module
二、包package
7、正則表達式
一、元字符
二、經常使用函數
三、分組
四、一個小實例-爬蟲
8、深拷貝與淺拷貝
9、文件與目錄
一、文件讀寫
二、OS模塊
三、目錄遍歷
10、異常處理
1、安裝、編譯與運行
Python的安裝很容易,直接到官網:http://www.python.org/下載安裝就能夠了。Ubuntu通常都預安裝了。沒有的話,就能夠#apt-get install python。Windows的話直接下載msi包安裝便可。Python 程序是經過解釋器執行的,因此安裝後,能夠看到Python提供了兩個解析器,一個是IDLE (Python GUI),一個是Python (command line)。前者是一個帶GUI界面的版本,後者實際上和在命令提示符下運行python是同樣的。運行解釋器後,就會有一個命令提示符>>>,在提示符後鍵入你的程序語句,鍵入的語句將會當即執行。就像Matlab同樣。
另外,Matlab有.m的腳步文件,python也有.py後綴的腳本文件,這個文件除了能夠解釋執行外,還能夠編譯運行,編譯後運行速度要比解釋運行要快。
例如,我要打印一個helloWorld。
方法1:直接在解釋器中,>>> print ‘helloWorld’。
方法2:將這句代碼寫到一個文件中,例如hello.py。運行這個文件有三種方式:
1)在終端中:python hello.py
2)先編譯成.pyc文件:
import py_compile
py_compile.compile("hello.py")
再在終端中:python hello.pyc
3)在終端中:
python -O -m py_compile hello.py
python hello.pyo
編譯成.pyc和.pyo文件後,執行的速度會更快。因此通常一些重複性並屢次調用的代碼會被編譯成這兩種可執行的方式來待調用。
2、變量、運算與表達式
這裏沒什麼好說的,有其餘語言的編程基礎的話都沒什麼問題。和Matlab的類似度比較大。這塊差異不是很大。具體以下:
須要注意的一個是:5/2 等於2,5.0/2纔等於2.5。
- print 'Please input a number:'
- number = int(raw_input())
- number += 1
- print number**2
- print number and 1
- print number or 1
- print not number
- 5/2
- 5.0/2
3、數據類型
一、數字
一般的int, long,float,long等等都被支持。並且會看你的具體數字來定義變量的類型。以下:
- num = 1
- num = 1111111111111
- num = 1.0
- num = 12L
- num = 1 + 12j
- num = '1'
二、字符串
單引號,雙引號和三引號均可以用來定義字符串。三引號能夠定義特別格式的字符串。字符串做爲一種序列類型,支持像Matlab同樣的索引訪問和切片訪問。
- num = "1"
- num = "Let's go"
- num = "He's \"old\""
- mail = "Xiaoyi: \n hello \n I am you!"
- mail =
- string = 'xiaoyi'
- copy = string[0] + string[1] + string[2:6]
- copy = string[:4]
- copy = string[2:]
- copy = string[::1]
- copy = string[::2]
- copy = string[-1]
- copy = string[-4:-2:-1]
- memAddr = id(num)
- type(num)
三、元組
元組tuple用()來定義。至關於一個能夠存儲不一樣類型數據的一個數組。能夠用索引來訪問,但須要注意的一點是,裏面的元素不能被修改。
- firstName = 'Zou'
- lastName = 'Xiaoyi'
- len(string)
- name = firstName + lastName
- firstName * 3
- 'Z' in firstName
- string = '123'
- max(string)
- min(string)
- cmp(firstName, lastName)
-
- user = ("xiaoyi", 25, "male")
- name = user[0]
- age = user[1]
- gender = user[2]
- t1 = ()
- t2 = (2, )
- user[1] = 26
- name, age, gender = user
- a, b, c = (1, 2, 3)
四、列表
列表list用[]來定義。它和元組的功能同樣,不一樣的一點是,裏面的元素能夠修改。List是一個類,支持不少該類定義的方法,這些方法能夠用來對list進行操做。
- userList = ["xiaoyi", 25, "male"]
- name = userList[0]
- age = userList[1]
- gender = userList[2]
- userList[3] = 88888
- userList.append(8888)
- "male" in userList
- userList[2] = 'female'
- userList.remove(8888)
- userList.remove(userList[2])
- del(userList[1])
-
五、字典
字典dictionary用{}來定義。它的優勢是定義像key-value這種鍵值對的結構,就像struct結構體的功能同樣。它也支持字典類支持的方法進行建立和操做。
- item = ['name', 'age', 'gender']
- value = ['xiaoyi', '25', 'male']
- zip(item, value)
- dic = {'name': 'xiaoyi', 'age': 25, 'gender': 'male'}
- dic = {1: 'zou', 'age':25, 'gender': 'male'}
- print dic['name']
- print dic[1]
- fdict = dict(['x', 1], ['y', 2])
- ddict = {}.fromkeys(('x', 'y'), -1)
- for key in dic
- print key
- print dic[key]
-
- dic['tel'] = 88888
- del dic[1]
- dic.pop('tel')
- dic.clear()
- del dic
- dic.get(1)
- dic.get(1, 'error')
- dic.keys()
- dic.values()
- dic.has_key(key)
4、流程控制
在這塊,Python與其它大多數語言有個很是不一樣的地方,Python語言使用縮進塊來表示程序邏輯(其它大多數語言使用大括號等)。例如:
if age < 21:
print("你不能買酒。")
print("不過你能買口香糖。")
print("這句話處於if語句塊的外面。")
這個代碼至關於c語言的:
if (age < 21)
{
print("你不能買酒。")
print("不過你能買口香糖。")
}
print("這句話處於if語句塊的外面。")
能夠看到,Python語言利用縮進表示語句塊的開始和退出(Off-side規則),而非使用花括號或者某種關鍵字。增長縮進表示語句塊的開始(注意前面有個:號),而減小縮進則表示語句塊的退出。根據PEP的規定,必須使用4個空格來表示每級縮進(不清楚4個空格的規定如何,在實際編寫中能夠自定義空格數,可是要知足每級縮進間空格數相等)。使用Tab字符和其它數目的空格雖然均可以編譯經過,但不符合編碼規範。
爲了使咱們本身編寫的程序能很好的兼容別人的程序,咱們最好仍是按規範來,用四個空格來縮減(注意,要麼都是空格,要是麼都製表符,千萬別混用)。
一、if-else
If-else用來判斷一些條件,以執行知足某種條件的代碼。
- if expression:
- statement(s)
-
- if expression:
- statement(s)
-
- if 1<2:
- print 'ok, '
- print 'yeah'
-
- if True:
- print 'true'
-
- def fun():
- return 1
-
- if fun():
- print 'ok'
- else:
- print 'no'
-
- con = int(raw_input('please input a number:'))
- if con < 2:
- print 'small'
- elif con > 3:
- print 'big'
- else:
- print 'middle'
-
- if 1 < 2:
- if 2 < 3:
- print 'yeah'
- else:
- print 'no'
- print 'out'
- else:
- print 'bad'
-
- if 1<2 and 2<3 or 2 < 4 not 0:
- print 'yeah'
二、for
for的做用是循環執行某段代碼。還能夠用來遍歷咱們上面所提到的序列類型的變量。
- for iterating_val in sequence:
- statements(s)
-
- for i in "abcd":
- print i
-
- for i in [1, 2, 3, 4]:
- print i
-
- range(5)
- range(1, 5)
- range(1, 10, 2)
- for i in range(1, 100, 1):
- print i
-
- fruits = ['apple', 'banana', 'mango']
- for fruit in range(len(fruits)):
- print 'current fruit: ', fruits[fruit]
-
- dic = {1: 111, 2: 222, 5: 555}
- for x in dic:
- print x, ': ', dic[x]
-
- dic.items()
- for key,value in dic.items():
- print key, ': ', value
- else:
- print 'ending'
-
- import time
- for x in range(1, 11):
- print x
- time.sleep(1)
- if x == 3:
- pass
- if x == 2:
- continue
- if x == 6:
- break
- if x == 7:
- exit()
- print '#'*50
三、while
while的用途也是循環。它首先檢查在它後邊的循環條件,若條件表達式爲真,它就執行冒號後面的語句塊,而後再次測試循環條件,直至爲假。冒號後面的縮近語句塊爲循環體。
- while expression:
- statement(s)
-
- while True:
- print 'hello'
- x = raw_input('please input something, q for quit:')
- if x == 'q':
- break
- else:
- print 'ending'
四、switch
其實Python並無提供switch結構,但咱們能夠經過字典和函數輕鬆的進行構造。例如:
-
- from __future__ import division
-
- def add(x, y):
- return x + y
- def sub(x, y):
- return x - y
- def mul(x, y):
- return x * y
- def div(x, y):
- return x / y
-
- operator = {"+": add, "-": sub, "*": mul, "/": div}
- operator["+"](1, 2)
- operator["%"](1, 2)
- operator.get("+")(1, 2)
-
- def cal(x, o, y):
- print operator.get(o)(x, y)
- cal(2, "+", 3)
5、函數
一、自定義函數
在Python中,使用def語句來建立函數:
- def functionName(parameters):
- bodyOfFunction
-
- def add(a, b):
- return a+b
-
- a = 100
- b = 200
- sum = add(a, b)
-
- def add(a = 1, b = 2):
- return a+b
- add()
- add(2)
- add(y = 1)
- add(3, 4)
-
- val = 100
- def fun():
- print val
- print val
-
- def fun():
- a = 100
- print a
- print a
-
- def fun():
- global a = 100
- print a
-
- print a
- fun()
- print a
-
- def fun(x):
- print x
- fun(10)
- fun('hello')
- fun(('x', 2, 3))
- fun([1, 2, 3])
- fun({1: 1, 2: 2})
-
- def fun(x, y):
- print "%s : %s" % (x,y)
- fun('Zou', 'xiaoyi')
- tu = ('Zou', 'xiaoyi')
- fun(*tu)
-
- def fun(name = "name", age = 0):
- print "name: %s" % name
- print "age: " % age
- dic = {name: "xiaoyi", age: 25}
- fun(**dic)
- fun(age = 25, name = 'xiaoyi')
-
- def fun(x, *args):
- print x
- print args
- fun(10)
- fun(10, 12, 24)
-
- def fun(x, **args):
- print x
- print args
- fun(10)
- fun(x = 10, y = 12, z = 15)
-
- def fun(x, *args, **kwargs):
- print x
- print args
- print kwargs
- fun(1, 2, 3, 4, y = 10, z = 12)
二、Lambda函數
Lambda函數用來定義一個單行的函數,其便利在於:
- fun = lambda x,y : x*y
- fun(2, 3)
- def fun(x, y):
- return x*y
-
- def recursion(n):
- if n > 0:
- return n * recursion(n-1)
-
- def mul(x, y):
- return x * y
- numList = range(1, 5)
- reduce(mul, numList)
- reduce(lambda x,y : x*y, numList)
-
- numList = [1, 2, 6, 7]
- filter(lambda x : x % 2 == 0, numList)
- print [x for x in numList if x % 2 == 0]
- map(lambda x : x * 2 + 10, numList)
- print [x * 2 + 10 for x in numList]
三、Python內置函數
Python內置了不少函數,他們都是一個個的.py文件,在python的安裝目錄能夠找到。弄清它有那些函數,對咱們的高效編程很是有用。這樣就能夠避免重複的勞動了。下面也只是列出一些經常使用的:
- abs, max, min, len, divmod, pow, round, callable,
- isinstance, cmp, range, xrange, type, id, int()
- list(), tuple(), hex(), oct(), chr(), ord(), long()
-
- callable
-
- isinstance
- numList = [1, 2]
- if type(numList) == type([]):
- print "It is a list"
- if isinstance(numList, list):
- print "It is a list"
-
- for i in range(1, 10001)
- for i in xrange(1, 10001)
-
- str = 'hello world'
- str.capitalize()
- str.replace("hello", "good")
- ip = "192.168.1.123"
- ip.split('.')
- help(str.split)
-
- import string
- str = 'hello world'
- string.replace(str, "hello", "good")
-
- len, max, min
- def fun(x):
- if x > 5:
- return True
- numList = [1, 2, 6, 7]
- filter(fun, numList)
- filter(lambda x : x % 2 == 0, numList)
- name = ["me", "you"]
- age = [25, 26]
- tel = ["123", "234"]
- zip(name, age, tel)
- map(None, name, age, tel)
- test = ["hello1", "hello2", "hello3"]
- zip(name, age, tel, test)
- map(None, name, age, tel, test)
- a = [1, 3, 5]
- b = [2, 4, 6]
- def mul(x, y):
- return x*y
- map(mul, a, b)
- reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])