time模块
# <1> 时间戳
>>> import time
>>> time.time()
1493136727.099066
# <2> 时间字符串
>>> time.strftime("%Y-%m-%d %X") #%Y:年 %m:月 %d:天 %X:时分秒
'2017-04-26 00:32:18'
#<3> 程序暂定固定的时间
import time
print('正在下载数据......')
time.sleep(2) #程序暂定n秒
print('下载成功!')
import time
#计算一组程序执行的耗时
start = time.time()
#测试代码
num = 0
for i in range(10000000):
num += 1
print(num)
##############################
print('总耗时:',time.time()-start)
可以利用时间模块分析程序所用时间,同时可以对网页爬取的时间进行格式化序列化
random模块
>>> import random
>>> random.random() # 大于0且小于1之间的小数
0.7664338663654585
>>> random.randint(1,5) # 大于等于1且小于等于5之间的整数
2
>>> random.randrange(1,3) # 大于等于1且小于3之间的整数
1
>>> random.choice([1,'23',[4,5]]) # 返回列表中的随机一个元素
1
>>> random.sample([1,'23',[4,5]],2) # 列表元素任意2个随机组合
[[4, 5], '23']
>>> random.uniform(1,3) #大于1小于3的小数
1.6270147180533838
>>> item=[1,3,5,7,9]
>>> random.shuffle(item) # 直接将原来的列表元素打乱次序,不会返回一个新列表
>>> item
[5, 1, 3, 7, 9]
一般使用较多的就是random.random生成一个随机0-1的数,和random.choice在多线程里面用的比较多
os模块
import 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 # 输出用于分割文件路径的字符串 win下为;,Linux下为:
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所指向的文件或者目录的最后修改时间
os.path.getsize(path) # ***返回path的大小
对目录对文件的操作来着找。
序列化模块:json(重点)
- 序列化: 将python中的字典,列表对象转换成指定形式字符串
- 反序列化:将指定格式的字符串转换成字典,列表对象
import json
dic = {
'hobby':['football','pingpang','smoke'],
'age':20,
'score':97.6,
'name':'zhangsan'
}
#序列化:将字典对象转换成了json格式的字符串
r = json.dumps(dic)
print(r)
import json
str = '{"hobby": ["football", "pingpang", "smoke"], "age": 20, "score": 97.6, "name": "zhangsan"}'
#反序列化:将字符串转换成了字典对象
dic = json.loads(str)
print(dic)
#持久化存储字典
import json
dic = {
'hobby':['football','pingpang','smoke'],
'age':20,
'score':97.6,
'name':'zhangsan'
}
fp = open('./dic.json','a')
#dump首先将dic字典进行序列化,然后将序列化后的结果写入到了fp表示的文件中
json.dump(dic,fp)
fp.close()
import json
fp = open('./dic.json','r')
#load将文件中的字符串数据进行读取,且将其转换成字典类型
dic = json.load(fp)
print(dic)
fp.close()
正则模块(重点)
-
什么是正则表达式?
- 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(例如,*,+,?等)。
- 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
-
常用的正则标识
单字符:
. : 除换行以外所有字符
[] :[aoe] [a-w] 匹配集合中任意一个字符
\d :数字 [0-9]
数量修饰:
* : 任意多次 >=0
+ : 至少1次 >=1
? : 可有可无 0次或者1次
{m} :固定m次 hello{3,}
{m,} :至少m次
{m,n} :m-n次
边界:
$ : 以某某结尾
^ : 以某某开头
分组:
(ab)
命名分组:
(?P<name>正则表达式),name是一个合法的标识符
贪婪模式: .*
非贪婪(惰性)模式: .*?
正则在python中的使用
- 基于re模块进行正则匹配操作
- 主要使用re模块中的findall进行指定规则的匹配
- findall(str,rule)
- str表示即将进行匹配的原始字符串数据
- rule表示指定规则的正则表达式
- findall返回的是列表,列表中存储匹配到的指定内容
- findall(str,rule)
import re
#提取170
string = '我喜欢身高为170的女孩'
ex = '\d+'
result = re.findall(ex,string)
print(result[0])
#####################################################################
#提取出http和https
key='http://www.baidu.com and https://boob.com'
ex = 'https?'
result = re.findall(ex,key)
print(result)
#####################################################################
import re
#提取出hello
key='lalala<hTml>hello</HtMl>hahah'
ex = '<hTml>(.*)</HtMl>'
result = re.findall(ex,key)
print(result)
#####################################################################
#提取出hit.
key='bobo@hit.edu.com'#想要匹配到hit.
# ex = 'h.*\.' #贪婪模式
ex = 'h.*?\.' #?将正则的贪婪模式调整为非贪婪模式。默认下为贪婪模式
result = re.findall(ex,key)
print(result)
#####################################################################
#匹配sas和saas
key='saas and sas and saaas'
ex = 'sa{1,2}s'
result = re.findall(ex,key)
print(result)
#####################################################################
key = '你好我的手机号是13222222222你记住了吗'
ex = '1[3,5,7,8,9]\d{9}'
result = re.findall(ex,key)
print(result)
#####################################################################
#提取ip和端口号
import re
s = "my computer ip is '230.192.168.78',and port is 8889 you got it?"
rep = re.search(r"ip is '(?P<ip>\d+\.\d+\.\d+\.\d+).* port is (?P<port>\d+)",s)
rep.group('ip'),rep.group('port')#通过命名分组引用分组
注:代码借鉴路飞