#!/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()
一起學Python吧~re正則+MySQL
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.