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

客户端

成功连接至服务器端...
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350