re、sqlite3魏铅、socket...
re match
import re
pattern = re.compile(r'Hello')
match = pattern.match('Hello there~')
print match
if match:
print match.group()
else:
print 'No match.'
print u'以上是有匹配結(jié)果的示例'
print u'********************'
print u'以下是無匹配結(jié)果的示例'
pattern2 = re.compile(r'Python')
match2 = pattern2.match('Hello there~')
print match2
if match2:
print match2.group()
else:
print 'No match.'
輸出結(jié)果
<_sre.SRE_Match object at 0x101eebd30>
Hello
以上是有匹配結(jié)果的示例
********************
以下是無匹配結(jié)果的示例
None
No match.
re search
import re
string = "I'm leaning python on this website."
pattern = re.compile(r'python')
match = pattern.match(string)
search = pattern.search(string)
if match:
print u'match 結(jié)果:' + match.group()
else:
print u'match 結(jié)果:No match.'
if search:
print u'search 結(jié)果:' + search.group()
else:
print u'search 結(jié)果:No search.'
輸出結(jié)果
match 結(jié)果:No match.
search 結(jié)果:python
區(qū)別
match() 只匹配字符串的起始勉吻,如果開始不匹配,便會返回 None忘晤,而 search() 是從頭至尾對字符串進(jìn)行匹配
re sub
將 2017-10-01 這個(gè)字符串變成 2017/10/01
import re
time = '2017-10-01'
pattern = re.compile(r'\D') # \D 表示匹配任意非數(shù)字
sub = pattern.sub('/', time) # sub(替換后的字符宛蚓,要匹配的字符串)
print sub
print re.sub(r'\D', '/', time) # 簡化寫法
正則表達(dá)匹配
匹配電話號碼
import re
phone = raw_input('phone number:')
pattern = re.compile('^0\d{2,3}\d{7,8}$|^1[3578]\d{9}$|^147\{8}$')
match = pattern.match(phone)
if match:
print(match.group())
else:
print('error')
正則表達(dá)式說明
^ 表示匹配字符串開頭
$ 表示匹配字符串結(jié)尾
\d 表示匹配任意數(shù)字
^0\d{2,3}\d{7,8}$ 為座機(jī)格式
0是第一個(gè)數(shù)字,后面接2到3個(gè)數(shù)字自稱區(qū)號设塔,加上7或8位電話號
^1[3578]\d{9}$ 為手機(jī)號格式
1是第一個(gè)數(shù)字凄吏,第二個(gè)數(shù)字可能是3578,后面接9位數(shù)字
^147\{8}$ 為移動(dòng)特殊號段
以147開頭,后面接8位數(shù)字
更多正則表達(dá)式參考 http://www.regexlab.com/zh/regref.htm
sqlite3數(shù)據(jù)庫
import sqlite3
# **創(chuàng)建數(shù)據(jù)庫**
connect = sqlite3.connect('test.db') # 創(chuàng)建數(shù)據(jù)庫
cursor = connect.cursor() # 創(chuàng)建游標(biāo)痕钢,以使用 sql 語句
# **查詢數(shù)據(jù)庫中已存在的表**
def searchTable(str):
global cursor
flag = False
cursor.execute("SELECT name FROM sqlite_master WHERE type = 'table'")
for item in cursor.fetchall():
print item # 結(jié)果為元組 (u'diary',)
if item[0] == str:
flag = True
break
return flag
# **創(chuàng)建表**
#創(chuàng)建一個(gè)名為 diary 的表图柏,并設(shè)置一個(gè) id 為自增主鍵,title盖喷、content 為 text 類型
def initTable(str):
global cursor
if searchTable(str) == False:
sql = "CREATE TABLE " + str + "(id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, content TEXT)"
cursor.execute(sql)
else:
print u'該表已存在'
initTable('diary')
# **增**
#向表中插入數(shù)據(jù)爆办,因?yàn)槭亲栽鲋麈I,id可以寫成NULL课梳,表中 id 值會是1距辆、2、3……遞增
cursor.execute("INSERT INTO diary VALUES(NULL, 'title1', 'content1')")
#或者寫成這樣
cursor.execute("INSERT INTO diary(title, content) VALUES('title2', 'content2')")
#查詢表中所有數(shù)據(jù)并輸出
for row in cursor.execute("SELECT * FROM diary"):
print row
print u'***** 增 *****'
# 函數(shù)形式例
# def insertData(name, tup):
# global connect
# global cursor
# sql = "INSERT INTO " + name + "(title, content) VALUES (?, ?)"
# cursor.execute(sql, tup)
# connect.commit()
# **刪**
#刪除表中 id 為 1 的數(shù)據(jù)
cursor.execute("DELETE FROM diary WHERE id = 1")
#查詢表中所有數(shù)據(jù)并輸出
for row in cursor.execute("SELECT * FROM diary"):
print row
print u'***** 刪 *****'
# **改**
#修改 id 為 2 的數(shù)據(jù)
cursor.execute("UPDATE diary SET title = 'title0', content = 'content0' WHERE id = 2")
#查詢表中所有數(shù)據(jù)并輸出
for row in cursor.execute("SELECT * FROM diary"):
print row
print u'***** 改 *****'
# **查**
items = [('111','222'),('333', '444'),('555','666')]
# executemany 一次向表中插入多條數(shù)據(jù)
cursor.executemany("INSERT INTO diary(title, content) VALUES (?, ?)", items)
print u'插入多條數(shù)據(jù)后的表'
for row in cursor.execute("SELECT * FROM diary"):
print row
print u"查 id 為 5 的數(shù)據(jù):"
cursor.execute("SELECT * FROM diary WHERE id = 5")
print cursor.fetchall()
print u"查 title 為 333 的數(shù)據(jù):"
cursor.execute("SELECT * FROM diary WHERE title = '333'")
print cursor.fetchall()
# **刪除表**
def dropTable(self, tableName):
sql = 'DROP TABLE IF EXISTS ' + tableName
self.cursor.execute(sql)
self.connect.commit()
return '表已刪除或不存在'
# **清空表**
def clearTable(self, tableName):
sql = 'DELETE FROM ' + tableName
reset = "'UPDATE sqlite_sequence SET seq = 0 WHERE name = '" + tableName + "'"
self.cursor.execute(sql)
self.cursor.execute(reset)
self.connect.commit()
return '表已清空'
cursor.close()
connect.close()
socket
服務(wù)端
import socket #導(dǎo)入socket模塊
s = socket.socket() #初始化socket對象
s.bind(('127.0.0.1', 1234)) #綁定端口
s.listen(5) #等待客戶端連接
while True:
c, addr = s.accept() #客戶端連接后暮刃,得到connect和address
print u'連接地址為:', addr
c.send('成功連接至服務(wù)器端...') #向客戶端發(fā)送消息
dict = eval(c.recv(1024)) #eval() 將字符串轉(zhuǎn)為為字典
if dict:
print dict, dict['title'], dict['content']
c.close() #關(guān)閉連接
# 解決端口被占用問題
# lsof -i:1234
# kill *****(進(jìn)程PID)
客戶端
import socket #導(dǎo)入socket模塊
s = socket.socket() #初始化socket對象
s.connect(('127.0.0.1',1234))
print s.recv(1024)
dict = {'title': 'title1', 'content': 'content1'}
s.send(str(dict)) #轉(zhuǎn)換為字符串后發(fā)送
s.close()
終端結(jié)果
服務(wù)端
連接地址為: ('127.0.0.1', 50875)
{'content': 'content1', 'title': 'title1'} title1 content1
客戶端
成功連接至服務(wù)器端...