美文网首页
python 其他备忘

python 其他备忘

作者: 一个认真学代码的pm | 来源:发表于2018-01-10 16:55 被阅读0次

    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
    

    客户端

    成功连接至服务器端...
    

    相关文章

      网友评论

          本文标题:python 其他备忘

          本文链接:https://www.haomeiwen.com/subject/xnpbnxtx.html