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())
import re
str1 = "18651054604"
m = re.search("1[345678]\d{9}",str1)
print(m.group())
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<last>[a-zA-Z ]+), (?P<first>[a-zA-Z ]+): (?P<phone>[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
import re
email = "[email protected] 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())
#冒泡
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)
参考这里
算法复杂度有两个要素,时间复杂度和空间复杂度。其中时间复杂度是指算法执行长度的度量,空间复杂度是算法占用内存空间的度量。
参考文件:百度文库-时间频度与时间复杂度这里我们只简单阐述一下时间复杂度。
T(n)
O(f(n)) --其中T(n)/O(f(n))=常数
一般情况下:
O(1)<O(log2n)<O(n)<O(n log2 n)<O(n^2)<O(n^3)<O(2^n)
所以选择算法复杂度较小的算法。
指数时间:
O(2n)
对数时间:
O(logN)
线性时间:
O(n)
常数时间:
O(1)
平方阶时间(或k次方阶时间)
O(n2)
O(n3)
O(nk)
如何自定义模块?
弄一堆.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文件之间的相互调用。
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
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...")
DATABASE = {
"user":"root",
"password":"123123",
"host":"localhost",
"port":3306,
}
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)函数
标准库好多,等下写几个刚用的。
在https://pypi.python.org/pypi可以下载开源模块
如何下载呢?
比如下载xheap 0.6,打开链接,复制链接,使用pip即可。
$pip https://pypi.python.org/pypi/xheap/0.6
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)
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所指向的文件或者目录的最后修改时间
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)
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)
用于序列化的两个模块
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)