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'以上是有匹配结果的示例'
print u'********************'
print u'以下是无匹配结果的示例'
pattern2 = re.compile(r'Python')
match2 = pattern2.match('Hello there~')
print match2
if match2:
print match2.group()
else:
print 'No match.'
输出结果
<_sre.SRE_Match object at 0x101eebd30>
Hello
以上是有匹配结果的示例
********************
以下是无匹配结果的示例
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 结果:' + match.group()
else:
print u'match 结果:No match.'
if search:
print u'search 结果:' + search.group()
else:
print u'search 结果:No search.'
输出结果
match 结果:No match.
search 结果:python
区别
match() 只匹配字符串的起始,如果开始不匹配,便会返回 None,而 search() 是从头至尾对字符串进行匹配
re sub
将 2017-10-01 这个字符串变成 2017/10/01
import re
time = '2017-10-01'
pattern = re.compile(r'\D') # \D 表示匹配任意非数字
sub = pattern.sub('/', time) # sub(替换后的字符,要匹配的字符串)
print sub
print re.sub(r'\D', '/', time) # 简化写法
正则表达匹配
匹配电话号码
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 表示匹配任意数字
^0\d{2,3}\d{7,8}$ 为座机格式
0是第一个数字,后面接2到3个数字自称区号,加上7或8位电话号
^1[3578]\d{9}$ 为手机号格式
1是第一个数字,第二个数字可能是3578,后面接9位数字
^147\{8}$ 为移动特殊号段
以147开头,后面接8位数字
更多正则表达式参考 http://www.regexlab.com/zh/regref.htm
sqlite3数据库
import sqlite3
# **创建数据库**
connect = sqlite3.connect('test.db') # 创建数据库
cursor = connect.cursor() # 创建游标,以使用 sql 语句
# **查询数据库中已存在的表**
def searchTable(str):
global cursor
flag = False
cursor.execute("SELECT name FROM sqlite_master WHERE type = 'table'")
for item in cursor.fetchall():
print item # 结果为元组 (u'diary',)
if item[0] == str:
flag = True
break
return flag
# **创建表**
#创建一个名为 diary 的表,并设置一个 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')
# **增**
#向表中插入数据,因为是自增主键,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')")
#查询表中所有数据并输出
for row in cursor.execute("SELECT * FROM diary"):
print row
print u'***** 增 *****'
# 函数形式例
# def insertData(name, tup):
# global connect
# global cursor
# sql = "INSERT INTO " + name + "(title, content) VALUES (?, ?)"
# cursor.execute(sql, tup)
# connect.commit()
# **删**
#删除表中 id 为 1 的数据
cursor.execute("DELETE FROM diary WHERE id = 1")
#查询表中所有数据并输出
for row in cursor.execute("SELECT * FROM diary"):
print row
print u'***** 删 *****'
# **改**
#修改 id 为 2 的数据
cursor.execute("UPDATE diary SET title = 'title0', content = 'content0' WHERE id = 2")
#查询表中所有数据并输出
for row in cursor.execute("SELECT * FROM diary"):
print row
print u'***** 改 *****'
# **查**
items = [('111','222'),('333', '444'),('555','666')]
# executemany 一次向表中插入多条数据
cursor.executemany("INSERT INTO diary(title, content) VALUES (?, ?)", items)
print u'插入多条数据后的表'
for row in cursor.execute("SELECT * FROM diary"):
print row
print u"查 id 为 5 的数据:"
cursor.execute("SELECT * FROM diary WHERE id = 5")
print cursor.fetchall()
print u"查 title 为 333 的数据:"
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
服务端
import socket #导入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('成功连接至服务器端...') #向客户端发送消息
dict = eval(c.recv(1024)) #eval() 将字符串转为为字典
if dict:
print dict, dict['title'], dict['content']
c.close() #关闭连接
# 解决端口被占用问题
# lsof -i:1234
# kill *****(进程PID)
客户端
import socket #导入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)) #转换为字符串后发送
s.close()
终端结果
服务端
连接地址为: ('127.0.0.1', 50875)
{'content': 'content1', 'title': 'title1'} title1 content1
客户端
成功连接至服务器端...