python123第五周_python之路-基础篇-第五周

一、正则表达式(续)

1.匹配IP地址

import re

a = "192.168.1.1"

#m = re.search("(\d{1,3}(.|)){4}", a)

#m = re.search("\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}", a)

m = re.search("(\d{1,3}.){3}\d{1,3}", a)

print(m.group())

2.匹配手机号

import re

str1 = "18651054604"

m = re.search("1[345678]\d{9}",str1)

print(m.group())

3.分组匹配

import re

contactInfo = 'Oldboy School, Beijing Changping Shahe: 010-8343245'

match = re.search('([a-zA-Z ]+), ([a-zA-Z ]+): ([0-9- ]+)', contactInfo) #分组

print(match.group())

print(match.group(1))

print(match.group(2))

print(match.group(3))

match = re.search('(?P[a-zA-Z ]+), (?P[a-zA-Z ]+): (?P[0-9- ]+)', contactInfo)

print(match.group())

print(match.group("last"))

print(match.group("first"))

print(match.group("phone"))

执行结果:

Oldboy School, Beijing Changping Shahe: 010-8343245

Oldboy School

Beijing Changping Shahe

010-8343245

Oldboy School, Beijing Changping Shahe: 010-8343245

Oldboy School

Beijing Changping Shahe

010-8343245

4.匹配email地址或网址

import re

email = "alex.li@126.com http://www.oldboyedu.com"

m = re.search("[0-9a-z.]{1,26}@[0-9a-z.]{1,10}.[a-z.]{1,6}",email)

print(m.group())

二、排序

1.冒泡排序

#冒泡

data = [10,4,33,21,54,3,8,11,5,22,2,1,17,13,6]

for j in range(1, len(data)): #range(1,15)

for i in range(len(data)-j): #range(15-j)

if data[i] > data[i+1]:

tmp = data[i+1] #交换位置

data[i+1] = data[i]

data[i] = tmp

print(data)

2.其他排序

三、时间复杂度

算法复杂度有两个要素,时间复杂度和空间复杂度。其中时间复杂度是指算法执行长度的度量,空间复杂度是算法占用内存空间的度量。

1.时间频度(语句频度)

T(n)

2.时间复杂度(渐进时间复杂度)

O(f(n)) --其中T(n)/O(f(n))=常数

一般情况下:

O(1)

所以选择算法复杂度较小的算法。

指数时间:

O(2n)

对数时间:

O(logN)

线性时间:

O(n)

常数时间:

O(1)

平方阶时间(或k次方阶时间)

O(n2)

O(n3)

O(nk)

四、模块

1.模块介绍

1)自定义模块

如何自定义模块?

弄一堆.py文件,按照一定方法分类,形成一个能够对外提供某些功能的东西;

在python3.x中可不在文件夹中增加__init__.py文件,然而在python2.x中必须要有;

自己搞一个模块:

文件结构如下:

各文件之间的关系

backend文件夹为后台服务相关,包括db和logic两个文件夹,分别处理数据库和逻辑相关的内容。

config文件夹为配置相关,有一个setting文件保存配置文件

frontend文件夹为前端相关,这里没写内容

user_mian.py文件为用户调用,模拟用户操作。

这里用user_mian中简单调用一个backend中logic的handle文件中的一个home函数,而home函数调用sql_api文件模拟获取从数据库中获得文件,但是在登陆数据库时,模拟从config下setting文件中获取用户名和密码。这样就简单实现一个模块中多个py文件之间的相互调用。

sql_api.py

from config import setting

def auth(configs):

if configs.DATABASE["user"] == "root" and configs.DATABASE["password"] == "123123": #为了方便验证,就直接写死了

print("welcom login database")

return True

else:

print("error....")

def select(name, age):

res = auth(setting)

if res:

return name,age

handle.py

from backend.db import sql_api

def home():

print("welcome to home page...")

q_data = sql_api.select("alex", "123")

print(q_data)

def movie():

print("welcome to movie page...")

def tv():

print("welcome to tv page...")

setting.py

DATABASE = {

"user":"root",

"password":"123123",

"host":"localhost",

"port":3306,

}

user_main.py

from backend.logic import handle

handle.home()

执行user_mian.py后:

welcome to home page... #handle中home()函数

welcom login database #sql_api调用了auth(configs),使用setting中的字典验证数据库登陆

('alex', '123') #sql_api调用select(name,age)函数

2)标准模块(标准库)

标准库好多,等下写几个刚用的。

3)开源模块:pip下载

在https://pypi.python.org/pypi可以下载开源模块

如何下载呢?

比如下载xheap 0.6,打开链接,复制链接,使用pip即可。

$pip https://pypi.python.org/pypi/xheap/0.6

2.sys模块

sys.argv 命令行参数List,第一个元素是程序本身路径

sys.exit(n) 退出程序,正常退出时exit(0)

sys.version 获取Python解释程序的版本信息

sys.maxint 最大的Int值

sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

sys.platform 返回操作系统平台名称

sys.stdout.write('please:') #标准输出文件,可以使用文件的其他操作,如write,flush等

val = sys.stdin.readline()[:-1] #默认最后会加一个空格,因此去掉

print(val)

#生成简单的进度条,依次显示10个#号

import sys

import time

for i in range(10):

sys.stdout.write("#")

sys.stdout.flush()

time.sleep(0.5)

3.os模块

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径

os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd

os.curdir 返回当前目录: ('.')

os.pardir 获取当前目录的父目录字符串名:('..')

os.makedirs('dirname1/dirname2') 可生成多层递归目录

os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推

os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname

os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname

os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

os.remove() 删除一个文件

os.rename("oldname","newname") 重命名文件/目录

os.stat('path/filename') 获取文件/目录信息

os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"

os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"

os.pathsep 输出用于分割文件路径的字符串

os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'

os.system("bash command") 运行shell命令,直接显示

os.environ 获取系统环境变量

os.path.abspath(path) 返回path规范化的绝对路径

os.path.split(path) 将path分割成目录和文件名二元组返回

os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素

os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素

os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False

os.path.isabs(path) 如果path是绝对路径,返回True

os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False

os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False

os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间

os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间

4.random模块

import random

print(random.random()) #0-1的随机浮点数

print(random.randint(1,2)) #1-2,包括1和2

print(random.randrange(1,10)) #1-10,包括1不包括10

#生成随机验证码,4位验证码

import random

check_words = ''

for i in range(4):

current = random.randrange(4)

if check_words != i:

check_words += str(chr(random.randint(65, 90)))

else:

check_words += str(random.randint(0, 9))

print(check_words)

5.time模块和datetime模块

import time

import datetime

print(time.clock()) #返回处理器时间,3.3开始已废弃

print(time.process_time()) #返回处理器时间,3.3开始已废弃

print(time.time()) #返回当前系统时间戳

print(time.ctime()) #输出Tue Jan 26 18:23:48 2016 ,当前系统时间

print(time.ctime(time.time()-86640)) #将时间戳转为字符串格式

print(time.gmtime(time.time()-86640)) #将时间戳转换成struct_time格式

print(time.localtime(time.time()-86640)) #将时间戳转换成struct_time格式,但返回 的本地时间

print(time.mktime(time.localtime())) #与time.localtime()功能相反,将struct_time格式转回成时间戳格式

#time.sleep(4) #sleep

print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #将struct_time格式转成指定的字符串格式

print(time.strptime("2016-01-28","%Y-%m-%d") ) #将字符串格式转换成struct_time格式

#datetime module

print(datetime.date.today()) #输出格式 2016-01-26

print(datetime.date.fromtimestamp(time.time()-864400) ) #2016-01-16 将时间戳转成日期格式

current_time = datetime.datetime.now() #

print(current_time) #输出2016-01-26 19:04:30.335935

print(current_time.timetuple()) #返回struct_time格式

#datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])

print(current_time.replace(2014,9,12)) #输出2014-09-12 19:06:24.074900,返回当前时间,但指定的值将被替换

str_to_date = datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M") #将字符串转换成日期格式

new_date = datetime.datetime.now() + datetime.timedelta(days=10) #比现在加10天

new_date = datetime.datetime.now() + datetime.timedelta(days=-10) #比现在减10天

new_date = datetime.datetime.now() + datetime.timedelta(hours=-10) #比现在减10小时

new_date = datetime.datetime.now() + datetime.timedelta(seconds=120) #比现在+120s

print(new_date)

6.json & pickle 模块

用于序列化的两个模块

json,用于字符串 和 python数据类型间进行转换,多语言之间通用(如java,C#,python)

pickle,用于python特有的类型 和 python的数据类型间进行转换,可是使用的数据类型更多

Json模块提供了四个功能:dumps、dump、loads、load

pickle模块提供了四个功能:dumps、dump、loads、load

#json 写

import json

f = open("data.txt",'w')

dic1 = {

"name": "alex",

"age": 12,

"job": "ITer"

}

# res = json.dumps(dic1)

# f.write(res)

# 等价于

json.dump(dic1, f)

f.close()

#json 读

import json

f = open("data.txt",'r') #使用字符串写入或读取

#res = json.loads(f.read())

# 等价于

res = json.load(f)

f.close()

print(res)

同样的pickle:

import pickle

f = open("data.txt",'wb') #注意使用二进制来读写

dic1 = {

"name": "alex",

"age": 12,

"job": "ITer"

}

# res = pickle.dumps(dic1)

# f.write(res)

# 等价于

pickle.dump(dic1, f)

f.close()

import pickle

f = open("data.txt",'rb') #使用二进制写入或读取

#res = pickle.loads(f.read())

# 等价于

res = pickle.load(f)

f.close()

print(res)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值