一起學Python吧~re正則+MySQL

#!/bin/env python3
#-*- coding:utf8 -*-
#學python3的第十一天
#核心函數和方法(正則模塊)
#************re模塊
# import re
# #在food開頭匹配f..匹配到返回匹配對象,否則返回None
# re.match('f..','food') #match匹配開頭(瞭解即可)
# print(re.match('f..','seafood'))
#
# #在字符串中匹配f..(重點掌握)
# re.search('f..','seafood')
# m = re.search('f..','seafood')
# #匹配到之後,用group方法返回匹配結果
# print(m.group())
# print(m)
# #返回所有查詢結果
# print(re.findall('f..','seafood is food'))
# #finditer返回的是由匹配對象構成的生成器
# a = list(re.finditer('f..','seafood is food'))
# print(a) #返回列表[<re.Match object; span=(3, 6), match='foo'>, <re.Match object; span=(11, 14), match='foo'>]
# #利用for循環逐個取出
# for m in re.finditer('f..','seafood is food'):
#     print(m.group())
#
# #以.和-作爲分隔符切割字符串
# r = re.split('-|\.','hello-world.tar.gz')
# print(r)
# #把x替換成tedu
# h = re.sub('x','tedu','Hello x. hi x')
# print(h)
#
# #爲了提升效率,建議將正則表達式的模塊優先編輯
# patt = re.compile('f..')
# m = patt.search('seafood')
# print(m.group())
# m = patt.findall('seafood is food')
# print(m)

#正則練習
#1310 行的access_log文件
#匹配ip用compile
# import re
#
# def count_patt(fname,patt):
#     result = {} #保存結果
#     cpatt = re.compile(patt) #編譯模式,提升效率
#
#     with open(fname) as fobj:
#         for line in fobj:
#             m = cpatt.search(line)
#             if m: #如果配到了
#                 key = m.group()
#                 result[key] = result.get(key,0) + 1
#
#     return result
#
#
# if __name__ == '__main__':
#     fname = 'access_log'
#     ip = '^(\d+\.){3}\d+' #12345.654.1.234 10.123.45.8(不嚴謹 但是可用)
#     br = 'Firefox|MSIE|Chrome' #匹配火狐 微軟 谷歌
#     result1 = count_patt(fname,ip)
#     result2 = count_patt(fname,br)
#     print(result1)
#     print(result2)
#
# #字典排序:字典本身沒有順序,需要將其轉換成其他序列類型
#     alist = list(result1.items())
#     print(alist)
# """複雜列表排序
# 列表的sort方法 只持一名爲key的參數
# key應該是一個函數
# 該函數處理列表每一項 處理結果作爲排序依據
#
# """
# def get_second(seq):
#     return  seq[-1]
#
# alist.sort(key=get_second)
# print(alist)
# #上面寫法可以用下一行解決
# alist.sort(key=lambda seq: seq[-1],reverse=True)
# print(alist)

# #用OOP實現
# import re
#
# class CountPatt:
#     def __init__(self, fname):
#         self.fname = fname
#
#     def count_patt(self, patt):
#         result = {}  # 保存結果
#         cpatt = re.compile(patt)  # 編譯模式,提升效率
#
#         with open(self.fname) as fobj:
#             for line in fobj:
#                 m = cpatt.search(line)
#                 if m:  # 如果匹配到了
#                     key = m.group()
#                     result[key] = result.get(key, 0) + 1
#
#         return result
#
# if __name__ == '__main__':
#     fname = 'access_log'
#     ip = '^(\d+\.){3}\d+'  # 12345.6789.1.232, 10.123.45.8
#     br = 'Firefox|MSIE|Chrome'
#     cp1 = CountPatt(fname)
#     result1 = cp1.count_patt(ip)
#     result2 = cp1.count_patt(br)
#     print(result1)
#     print(result2)
#     print('*'* 30)
#
#     cp2 = CountPatt('/etc/passwd')
#     result3 = cp2.count_patt('nologin$|bash$')
#     print(result3)

#安裝數據庫
# """
# ## 數據庫
#
# ### 安裝py軟件包
#
# ```shell
# # 1. 在線直接安裝
# (nsd1906) [root@room8pc16 day04]# pip install pymysql
# # 直接安裝,將訪問python官方站點,速度慢,可以使用國內鏡像站點,方法如下:
# (nsd1906) [root@room8pc16 day04]# mkdir ~/.pip/
# (nsd1906) [root@room8pc16 day04]# vim ~/.pip/pip.conf
# [global]
# index-url = http://pypi.douban.com/simple/
# [install]
# trusted-host=pypi.douban.com
#
#
# # 2. 本地安裝
# # ls /linux-soft/05/zzg_pypkgs.tar.gz
# # 將該文件解壓:
# [root@room8pc16 zzg_pypkgs]# ls
# ansible-cmdb_pkgs  matplotlib_pkgs  requests_pkgs
# ansible_pkg        paramiko_pkgs    sqlalchemy_pkgs
# dj_pkgs            pymysql_pkgs     wordcloud_pkgs
# jenkins            python3_pkg
# (nsd1906) [root@room8pc16 day04]# pip install pymysql_pkgs/*
# """


#pymysql模塊
#創建小型數據庫
# import pymysql
#
# # 創建到數據庫服務器的連接
# conn = pymysql.connect(
#     host='192.168.1.50',
#     port=3306,
#     user='root',
#     passwd='123456',
#     db='nsd1906',
#     charset='utf8'
# )
#
# # 創建遊標。遊標就像是文件對象,通過文件對象可以對文件讀寫
# # 通過遊標,可以對數據實現增刪改查
# cur = conn.cursor()
#
# # 編寫sql語句
# create_dep = """CREATE TABLE departments(
# dep_id INT, dep_name VARCHAR(20),
# PRIMARY KEY(dep_id)
# )"""
# create_emp = """CREATE TABLE employees(
# emp_id INT, emp_name VARCHAR(20), birth_date DATE,
# email VARCHAR(50), dep_id INT,
# PRIMARY KEY(emp_id),
# FOREIGN KEY(dep_id) REFERENCES departments(dep_id)
# )"""
# create_sal = """CREATE TABLE salary(
# id INT, date DATE, emp_id INT, basic INT, awards INT,
# PRIMARY KEY(id),
# FOREIGN KEY(emp_id) REFERENCES employees(emp_id)
# )"""
#
# # 執行sql語句
# cur.execute(create_dep)
# cur.execute(create_emp)
# cur.execute(create_sal)
#
# # 如果是增刪改操作,需要commit
# conn.commit()
#
# # 關閉
# cur.close()
# conn.close()


# #************插入/查詢/修改/刪除
# import pymysql
#
# # 創建到數據庫服務器的連接
# conn = pymysql.connect(
#     host='192.168.1.50',
#     port=3306,
#     user='root',
#     passwd='123456',
#     db='nsd1906',
#     charset='utf8'
# )

# # 創建遊標。遊標就像是文件對象,通過文件對象可以對文件讀寫
# # 通過遊標,可以對數據實現增刪改查
# cur = conn.cursor()
#
# # 編寫sql語句

# #插入
# insert1 = 'INSERT INTO departments VALUES(%s, %s)'
# hr = (1, '人事部')
# ops = (2, '運維部')
# dev = (3, '開發部')
# qa = (4, '測試部')
# sales = (5, '銷售部')
# market = (6, '市場部')
#
# cur.executemany(insert1, [hr])
# cur.executemany(insert1, [ops, dev, qa, sales, market])


# # 查詢
# select1 = 'SELECT * FROM departments ORDER BY dep_id'
# cur.execute(select1)
# result1 = cur.fetchone()  # 取出一條記錄
# result2 = cur.fetchmany(2)   # 繼續取出2條記錄
# result3 = cur.fetchall()  # 取出剩餘全部記錄
# print(result1)
# print('*'* 30)
# print(result2)
# print('*'* 30)
# print(result3)


# #修改
# update1 = 'UPDATE departments SET dep_name=%s WHERE dep_name=%s'
# cur.execute(update1,('人力資源部','人事部'))


# #刪除
# delete1 = 'DELETE FROM departments WHERE dep_id=%s'
# cur.execute(delete1,(6,))



# # 如果是增刪改操作,需要commit
# conn.commit()
#
# # 關閉
# cur.close()
# conn.close()


#****************SQLALCHEMY*******************
# """
# 不限數據庫
# 不用編寫SQL語句
# 採用ORM(對象關係映射)
#     Object:對象
#     Relationship:關係
#     Mapper:映射
#     數據庫的表與class映射
#     表中的字段與類變量映射
#     數據庫的數據類型與SQLalchemy中的類映射
#     表中的一條記錄與類的一個實例映射
# """
#
"""安裝
#pip install sqlalchemy_pkgs /*
- 創建新數據庫
MariaDB [csdnak]>CREATE DATABASE csdn1998 DEFAULT CHARSET utf8;
"""
#編寫dbconn.py
# from sqlalchemy import create_engine, Column, Integer, String, Date, ForeignKey
# from sqlalchemy.ext.declarative import declarative_base
# from sqlalchemy.orm import sessionmaker
#
# # 創建到數據庫的連接引擎
#
# engine = create_engine(
#     # mysql+pymysql://用戶:密碼@服務器/數據庫?參數
#     'mysql+pymysql://root:[email protected]/csdn1998?charset=utf8',
#     encoding='utf8',
#     # echo=True  # 在終端顯示debug日誌,生產環境勿用
# )
# # 創建基類
# Base = declarative_base()
# # 創建會話類
# Session = sessionmaker(bind=engine)
#
# # 創建實體類,必須繼承基類
# class Departments(Base):
#     __tablename__ = 'departments'
#     dep_id = Column(Integer, primary_key=True)
#     dep_name = Column(String(20), unique=True)
#
# class Employees(Base):
#     __tablename__ = 'employees'
#     emp_id = Column(Integer, primary_key=True)
#     emp_name = Column(String(20))
#     birth_date = Column(Date)
#     email = Column(String(50))
#     dep_id = Column(Integer, ForeignKey('departments.dep_id'))
#
# class Salary(Base):
#     __tablename__ = 'salary'
#     id = Column(Integer, primary_key=True)
#     date = Column(Date)
#     emp_id = Column(Integer, ForeignKey('employees.emp_id'))
#     basic = Column(Integer)
#     awards = Column(Integer)
#
# if __name__ == '__main__':
#     # 如果庫中不存在對應的表則創建;存在就不創建了
#     Base.metadata.create_all(engine)

#*****************crud:增刪改查***************
#*********create/retrieve/update/delete*********
# from dbconn import Session, Departments, Employees
#
# # 建立到數據庫的會話連接
# session = Session()
#
# # 創建部門
# hr = Departments(dep_id=1, dep_name='人事部')
# ops = Departments(dep_id=2, dep_name='運維部')
# dev = Departments(dep_id=3, dep_name='開發部')
# qa = Departments(dep_id=4, dep_name='測試部')
# market = Departments(dep_id=5, dep_name='市場部')
# sales = Departments(dep_id=6, dep_name='銷售部')
#
# # 通過會話操作數據庫
# session.add_all([hr, ops, dev, qa, market, sales])
#
#
# # 確認
# session.commit()
#
# # 關閉會話
# session.close()

#****************練習******************
# #-----窗口按鈕
# import tkinter
# from functools import partial
#
# def hello(word):
#     def welcome():
#         lb.config(ext='Hello %s!'% word)
#     return welcome #hello函數的返回值還是函數
#
# root = tkinter.Tk()
# lb = tkinter.Label(text='Hello world!',font='Times 26')
# MyBtn = partial(tkinter.Button,root,fg='white',bg='blue')
# b1 = MyBtn(text='Button 1',command=hello('China'))
# b2 = MyBtn(text='Button 2',command=hello('Tedu'))
# b3 = MyBtn(text='quit',command=root.quit)
# lb.pack()
# b1.pack()
# b2.pack()
# b3.pack()
# root.mainloop()

#裝飾器基礎
# def color(func):
#     def red():
#         return '\033[31;1m%s\033[0m' % func()
#     return red
#
# def hello():
#     return 'Hello World!'
#
# @color
# def welcome():
#     return 'Hello China!'
#
# if __name__ == '__main__':
#     hello = color(hello)  # 此種寫法可以換成爲welcome加上@color的寫法
#     print(hello())
#     print(welcome())  # welcome因爲有裝飾器,所以調用時不是調用welcome函數
#                       # 而是相當於color(welcome)()
#                       # color(welcome)返回red,color(welcome)()
#                       # 等價於red()

#帶有參數的裝飾器
# def color(funcation):
#     def red(*args):
#         return '\033[31;1m%s\033[0m' % funcation(*args)
#     return red
#
# @color
# def hello(word):
#     return 'Hello %s !' % word
#
# @color
# def welcome():
#     return 'How are you?'
#
# if __name__ == '__main__':
#     print(hello('China'))
#     print(welcome())

#裝飾器 返回不同顏色的字體
# def colors(c):
#     def set_color(func):
#         def red(*word):
#             return '\033[31;1m%s\033[0m' % func(*word)
#         def green(*word):
#             return '\033[32;1m%s\033[0m' % func(*word)
#         adict = {'red':red,'green': green}
#         return adict[c]
#     return set_color()
#
# @colors('red')
# def hellp():
#     return 'Hello world!'
#
# @colors('green')
# def welcome(word):
#     return 'Hello %s' %word
#
# if __name__ == '__main__':
#     print(hello()) #->hello = set_color(hello)
#     print(welcome('China'))

#記賬程序複習
# import pickle
# import os
# import time
#
# def cost(wallet,record): #記錄花錢的函數
#     amount = int(input('amount: '))
#     comment = input('comment: ')
#     date = time.strftime('%Y-%m-%d')
#     with open(wallet,'rb') as fobj:
#         balance = pickle.load(fobj)
#     with open(wallet,'wb')as fobj:
#         pickle.dump(balance,fobj)
#     with open(record,'a') as fobj:
#         fobj.write(
#             '%-12s%-8s%-8s%-10s%-20s\n' % (date,amount,'',balance,comment)
#         )
#
#
# def save(wallet,record): #記錄存錢的函數
#     amount = int(input('amount: '))
#     comment = input('comment: ')
#     date = time.strftime('%Y-%m-%d')
#     with open(wallet,'rb')as fobj:
#         balance = pickle.load(fobj) +amount
#     with open(wallet,'wb')as fobj:
#         pickle.dump(balance,fobj)
#     with open(record,'a')as fobj:
#         fobj.write(
#             '%-12s%-8s%-8s%-10s%-20s\n'% (date,'',amount,balance,comment)
#         )
#
#
# def query(wallet,record): #查詢收支明細的函數
#     print('%-12s%-8s%-8s%-10s%-20s' % ('date','cost','save','balance','comment'))
#     with open(record)as fobj:
#         for line in fobj:
#             print(line,end="")
#     with open(wallet,'rb')as fobj:
#         balance =pickle.load(fobj)
#     print('Latest Balance: %d' % balance)
#
#
# def show_menu():
#     cmds = {'0':cost,'1':save,'2':query}
#     prompt = """(0)cost
# (1)save
# (2)query
# (3)exit
# Please input your choice(0/1/2/3): """
#     wallet = 'wallet.data'
#     record = 'record.txt'
#     if not os.path.exists(wallet):
#         with open(wallet,'wb')as fobj:
#             pickle.dump(10000,fobj)
#
#     while True:
#         try:
#             choice = input(prompt).strip()[0]
#         except IndexError:
#             continue
#         except (KeyboardInterrupt,EOFError):
#             print()
#             chocie = '3'
#
#         if choice not in '0123':
#             print('Invalid input.Try')
#             continue
#
#         if choice == '3':
#             break
#         cmds[choice](wallet,record)
#
# if __name__ == '__main__':
#     show_menu()

# ************hashlib模塊之計算md5值
# check_md5.py
# import hashlib
# import sys
#
# def check_md5(fname):
#     m = hashlib.md5()
#
#     with open(fname,'rb')as fobj:
#         while True:
#             data = fobj.read(4096)
#             if not data:
#                 break
#             m.update(data)
#
#     return m.hexdigest()
#
#
# if __name__ == '__main__':
#     print(check_md5(sys.argv[1])) #python3 check_md5.py /etc/passwd

#****************tarfile模塊的基礎應用複習
# import tarfile
#
# #壓縮文件的方法
# tar = tarfile.open('/tmp/demo.tar.gz','w:gz')#gzip壓縮
# tar.add('/etc/hosts')
# tar.add('/etc/security')
# tar.close()
# #tar tvzf /tmp/demo.tar.gz
# #解壓文件的方法
# tar = tarfile.open('/tmp/demo.tar.gz','r:gz')
# tar.extractall() #解壓所有文件到當前目錄
# tar.close()

#***********OOP基礎
# class BearToy:
#     def __init__(self,nm,color,size):
#         """__init__再次實例化是自動執行,實例本身自動作爲第一個參數傳遞給self
#         self只是習慣用的名字,不是必須使用 可以自定義
#         :param nm:
#         :param color:
#         :param size:
#         """
#         self.name = nm
#         self.color = color #綁定屬性到實例
#         self.size = size
#
#     def sing(self):
#         print('lalala...')
#
#     def speak(self):
#         print('My name is %s' % self.name)
#
# if __name__ == '__main__':
#     tidy=BearToy('Tidy','White','Large') #調用__init__
#     print(tidy.color)
#     print(tidy.size)
#     tidy.sing()
#     tidy.speak()

#***********************OOP之組合
# class Vendor:
#     def __init__(self,phone,email):
#         self.phone = phone
#         self.email = email
#
#     def call(self):
#         print('calling%s'% self.phone)
#
# class BearToy:
#     def __init__(self,color,size,phone,email):
#         self.color = color #綁定屬性到實例
#         self.size = size
#         self.vendor = Vendor(phone,email)
#
# if __name__ == '__main__':
#     bigbear = BearToy('Brown','Middle','400-111-8989','[email protected]')
#     print(bigbear.color)
#     bigbear.vendor.call()

#*********************OOP之繼承
# class BearToy:
#     def __init__(self,nm,color,size):
#         self.name = nm
#         self.color = color
#         self.size =size
#
#     def sing(self):
#         print('alala...')
#
#     def speak(self):
#         print('My name is %s'% self.name)
#
# class NewBear(BearToy):
#     def run(self):
#         print('running...')
#
# if __name__ == '__main__':
#     b1 = NewBear('venie', 'Brown', 'Small')
#     b1.sing()
#     b1.run()

#***************OOP子類調用父類方法
# class BearToy:
#     def __init__(self,nm,color,size):
#         self.name = nm
#         self.color = color #綁定屬性到實例
#         self.size = size
#
#     def sing(self):
#         print('lalala...')
#
#     def speak(self):
#         print('My name is csndak %s'% self.name)
#
# class NewBear(BearToy):
#     def __init__(self,nm,color,size,date):
#         #BearToy.__inir__(self,nm,color,size) #一下寫法完全一樣 更推薦下面寫法
#         super(NewBear, self).__init__(nm,color,size)
#         self.date = date #新品玩具熊增加玩具熊的生產日期
#
#     def run(self):
#         print('running...')
#
# if __name__ == '__main__':
#     b1 = NewBear('venie','Brown','Small','2018-07-20')
#     b1.sing()
#     b1.run()

#**********************OOP必須掌握的magic(魔法)
# class Book:
#     def __init__(self,title,author,pages):
#         self.title = title
#         self.author = author
#         self.pages = pages
#
#     def __str__(self):
#         return '《%s》' % self.title
#
#     def __call__(self,):
#         print('《%s》 is written by %s'% (self.title,self.author))
#
# if __name__ == '__main__':
#     py_book = Book('Core Python','Wesley',800) #調用__init__()方法
#     print(py_book) #調用__str__
#     py_book() #調用__call__
#
#***************OOP多重繼承
# class A:
#     def foo(self):
#         print('in Afoo')
#     def hello(self):
#         print('A hello')
#
# class B:
#     def bar(self):
#         print('in B bar')
#     def hello(self):
#         print('B hello')
#
# class C(B,A):
#     pass
#     #def hello(self):
#     #   print('C hello')
#
# if __name__ == '__main__':
#     c = C()
#     c.foo()
#     c.bar()
#     c.hello()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章