以前也蜻蜓點水的看了一下Python的基礎,可是感受有點不紮實,因此本身又從新細細的把基礎過了一遍,同時把覺着重要的記錄下來。文章最末尾分享了《Python爬蟲開發與項目實戰》pdf書籍,此pdf是高清有目錄的,有須要的朋友拿去。html
元組內的數據不能修改和刪除算法
Python 表達式 | 結果 | 描述 |
---|---|---|
('Hi!',) * 4 | ('Hi!', 'Hi!', 'Hi!', 'Hi!') | 複製 |
3 in (1, 2, 3) | True | 元素是否存在 |
任意無符號的對象,以逗號隔開,默認爲元組。例:x, y = 1, 2;json
必定要有一個逗號,要不是錯誤的數組
tuple = ("apple",)
複製代碼
def test2():
x = 2
y = 3
x, y = y, x
print x,y
複製代碼
help多線程
help(list)
複製代碼
dict["x"]="value"
複製代碼
若是索引x不在字典dict的key中,則會新增一條數據,反之爲修改數據app
set() 函數建立一個無序不重複元素集,可進行關係測試,刪除重複數據,還能夠計算交集、差集、並集等。框架
x = set(["1","2"])
y = set(["1","3","4"])
print x&y # 交集
print x|y # 並集
print x-y # 差集
zip(x) #解包爲數組
複製代碼
zip() 函數用於將可迭代的對象做爲參數,將對象中對應的元素打包成一個個元組,而後返回由這些元組組成的列表。函數
若是各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同,利用 * 號操做符,能夠將元組解壓爲列表。性能
a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
zipped = zip(a,b) # 打包爲元組的列表[(1, 4), (2, 5), (3, 6)]
zip(a,c) # 元素個數與最短的列表一致[(1, 4), (2, 5), (3, 6)]
zip(*zipped) #與zip相反,可理解爲解壓,返回二維矩陣式
[(1, 2, 3), (4, 5, 6)]
複製代碼
在函數的參數使用標識符"*"來實現可變參數的功能。"*"能夠引用元組,把多個參會組合到一個元組中; "**"能夠引用字典測試
def search(*t,**d):
keys = d.keys()
for arg in t:
for key in keys:
if arg == key:
print ("find:",d[key])
search("a","two",a="1",b="2") #調用
複製代碼
strftime()
函數import time
print time.strftime("%Y-%m-%d",time.localtime())
複製代碼
strftime
和datetime模塊中的datetime()
函數import time
import datetime
t = time.strptime("2018-3-8", "%Y-%m-%d")
y, m, d = t[0:3]
print datetime.datetime(y,m,d)
複製代碼
好比對文件重命名、刪除、查找等操做
os
庫:文件的重命名、獲取路徑下全部的文件等。os.path
模塊能夠對路徑、文件名等進行操做files = os.listdir(".")
print type(os.path)
for filename in files:
print os.path.splitext(filename)# 文件名和後綴分開
複製代碼
shutil
庫:文件的複製、移動等操做glob
庫:glob.glob("*.txt")查找當前路徑下後綴名txt全部文件經過configparser
(3.x,ConfigParser(2.x))庫進行配置的文件的讀取、更改、增長等操做
config = ConfigParser.ConfigParser()
config.add_section("系統")
config.set("系統", "系統名稱", "iOS")
f = open("Sys.ini", "a+")
config.write(f)
f.close()
複製代碼
re
正則匹配查找等操做
私有屬性名字前邊加"__"
class Fruits:
price = 0 # 類屬性,全部的類變量共享,對象和類都可訪問。可是修改只能經過類訪問進行修改
def __init__(self):
self.color = "red" # 實例變量,只有對象才能夠訪問
zone = "中國" # 局部變量
self.__weight = "12" # 私有變量,不能夠直接訪問,能夠經過_classname__attribute進行訪問
if __name__ == "__main__":
apple = Fruits()
print (apple._Fruits__weight) #訪問私有變量
複製代碼
@staticmethod
def getPrice():
print (Fruits.price)
複製代碼
def __getWeight(self):
print self.__weight
複製代碼
@classmethod
def getPrice2(cls):
print (cls.price)
複製代碼
Python做爲動態腳本語言,編寫的程序也具備很強的動態性。
class_name.method_name = function_name
而且支持多重繼承
格式:
class class_name(super_class1,super_class2):
@abstractmethod
def grow(self):
pass
複製代碼
Python將運算符和類的內置方法關聯起來,每一個運算符對應1個函數。例如__add__()表示加好運算符;gt()表示大於運算符
經過重載運算符咱們能夠實現對象的加減或者比較等操做。
捕獲異常
try: except:finally:
raise語言拋出異常
assert len(t)==1
shelve
本地建庫shelve
模塊提供了本地數據化存儲的方法
addresses = shelve.open("addresses") # 若是沒有本地會建立
addresses["city"] = "北京"
addresses["pro"] = "廣東"
addresses.close()
複製代碼
cPickle
和pickle
兩個模塊都是來實現序列號的,前者是C語言編寫的,效率比較高
序列化:
import cPickle as pickle
str = "我須要序列化"
f = open("serial.txt", "wb")
pickle.dump(str, f)
f.close()
複製代碼
反序列化:
f = open("serial.txt","rb")
str = pickle.load(f)
f.close()
複製代碼
Python內置了json模塊用於json數據的操做
import json
new_str = [{'a': 1}, {'b': 2}]
f = open('json.txt', 'w')
json.dump(new_str, f,ensure_ascii=False)
f.close()
複製代碼
import json
f = open('json.txt', 'r')
str = json.load(f)
print str
f.close()
複製代碼
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
# -*- coding:UTF-8 -*-
import threading
import Queue
class MyJob(threading.Thread):
def __init__(self):
threading.Thread.__init__(self, name="aa")
def run(self):
print threading.currentThread()
while not q.empty():
a = q.get()
print("個人%d"%a)
print "個人線程"
q.task_done()
def job(a, b):
print a+b
print threading.activeCount()
print "多線程"
thread = threading.Thread(target=job, args=(2, 4), name="mythread")
q = Queue.Queue()
if __name__ == "__main__":
myjob = MyJob()
for i in range(100):
q.put(i)
myjob.start()
q.join() #每一個昨晚的任何須須調用task_done(),要不主線程會掛起
複製代碼
multiprocessing
中 Process
能夠建立進程,經過Pool
進程池能夠對進程進行管理
from multiprocessing import Process
import os
def run_pro(name):
print 'process %s(%s)' % (os.getpid(),name)
if __name__ == "__main__":
print 'parent process %s' % os.getpid()
for i in range(5):
p = Process(target=run_pro, args=(str(i)))
p.start()
複製代碼
import urllib2
response = urllib2.urlopen('http://www.baidu.com')
html = response.read()
print html
try:
request = urllib2.Request('http://www.google.com')
response = urllib2.urlopen(request,timeout=5)
html = response.read()
print html
except urllib2.URLError as e:
if hasattr(e, 'code'):
print 'error code:',e.code
print e
複製代碼
import requests
r = requests.get('http://www.baidu.com')
print r.content
print r.url
print r.headers
複製代碼
經過BeautifulSoup
來解析html數據,Python標準庫(html.parser)容錯比較差,通常使用第三方的lxml
,性能、容錯等比較好。
hashlib 是一個提供了一些流行的hash算法的 Python 標準庫.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512. 另外,模塊中所定義的 new(name, string=」) 方法可經過指定系統所支持的hash算法來構造相應的hash對象
連接: Python爬蟲開發與項目實戰 密碼: g19d