python 其他备忘

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

客户端

成功连接至服务器端...
    原文作者:一个认真学代码的pm
    原文地址: https://www.jianshu.com/p/6b28e55e21f4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞