time
time模块
time模块的三种模式
模块 | 结果 | 说明 |
---|
time.time() | 1613221384.608557 | 1.时间戳 |
time.strftime('%Y-%m-%d') | 2021-02-13 | 2.格式化时间 |
time.localtime() | time.struct_time(tm_year=2021… | 3.时间元祖 |
time时间转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import time print(time.time()) print(time.strftime("%Y-%m-%d")) print(time.localtime()) print(time.gmtime())
print(time.mktime(time.localtime()))
print(time.strptime("2023-09-21", "%Y-%m-%d"))
print(time.strftime("%Y-%m-%d", "2023-01-09"))
print(time.asctime(time.localtime()))
print(time.ctime(time.time()))
|
datetime
datetime获取时间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import datetime
print(datetime.datetime.now())
print(datetime.datetime.now()+datetime.timedelta(day=3))
print(datetime.datetime.now()+datetime.timedelta(day=-3))
print(datetime.datetime.now()+datetime.timedelta(hours=3))
print(datetime.datetime.now()+datetime.timedelta(minutes = -3))
print(datetime.datetime.now().date())
print(datetime.datetime.now().strftime("%Y-%m-%d %H-%M-%S"))
|
datetime时间转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import datetime
print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
print(datetime.datetime.strptime('2016-02-22',"%Y-%m-%d"))
print(datetime.datetime.now().timetuple())
print(datetime.datetime.fromtimestamp(1520561646.8906238))
|
os
os模块常用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| import os
print(os.getcwd())
os.chdir("C:\\Users\\admin\\PycharmProjects\\s14") os.chdir(r"C:\Users\admin\PycharmProjects\s14") print(os.getcwd())
print(os.curdir)
print(os.pardir)
os.makedirs(r'C:\aaa\bbb')
os.removedirs(r'C:\aaa\bbb')
os.mkdir(r'C:\bbb')
os.rmdir(r'C:\aaa')
print(os.listdir(r"C:\Users\admin\PycharmProjects\s14"))
os.remove(r'C:\bbb\test.txt')
os.rename(r'C:\bbb\test.txt',r'C:\bbb\test00.bak')
print(os.stat(r'C:\bbb\test.txt'))
print(os.sep)
print(os.linesep)
print(os.pathsep)
print(os.name)
os.system("bash command")
print(os.environ)
print(os.path.abspath(r'C:/bbb/test.txt'))
print(os.path.split(r'C:/bbb/ccc'))
print(os.path.dirname(r'C:/bbb/ccc'))
print(os.path.basename(r'C:/bbb/ccc/ddd'))
print(os.path.exists(r'C:/bbb/ccc/'))
print(os.path.isabs(r"C:\Users\admin\PycharmProjects\s14\Day5\test4"))
print(os.path.isfile(r'C:/bbb/ccc/test2.txt'))
print(os.path.isdir(r'C:/bbb/ccc'))
print(os.path.getatime(r'C:/bbb/ccc/test2.txt'))
print(os.path.getmtime(r'C:/bbb/ccc/test2.txt'))
put_filename = '%s%s%s'%(self.home,os. path.sep, filename)
|
os模块使用场景
添加文件夹到环境变量
1 2 3 4 5 6 7 8
| import os,sys print(os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) )) BASE_DIR = os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) ) sys.path.append(BASE_DIR)
|
os.popen获取脚本执行结果
1 2 3
| data = {'name':'aaa'} import json print json.dumps(data)
|
1 2 3 4 5 6 7 8 9
|
import os,json
ret = os.popen('python data.py') data = ret.read().strip() ret.close() data = json.loads(data) print data
|
sys
sys基本方法
sys.argv 返回执行脚本传入的参数
sys.exit(n) 退出程序,正常退出时exit(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
sys.stdout.write(‘please:’)
val = sys.stdin.readline()[:-1]
使用sys返回运行脚本参数
1 2 3 4
| import sys
print(sys.argv) print(sys.argv[1:])
|
json与pickle
json
- 1.序列化 (json.dumps) :是将内存中的对象存储到硬盘,变成字符串
- 2.反序列化(json.loads) : 将刚刚保存在硬盘中的内存对象从新加载到内存中
- json.dumps( data,ensure_ascii=False, indent=4)
1 2 3 4 5 6 7 8 9 10
| import json info = { 'name':"tom", "age" :"100" } f = open("test.txt",'w')
f.write(json.dumps(info)) f.close()
|
1 2 3 4 5 6
| import json f = open("test.txt","r") data = json.loads(f.read()) f.close() print(data["age"])
|
pickle序列化
- python的pickle模块实现了python的所有数据序列和反序列化。
- 基本上功能使用和JSON模块没有太大区别,方法也同样是dumps/dump和loads/load
- 与JSON不同的是pickle不是用于多种语言间的数据传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的方法,因此它支持了python所有的数据类型。
pickle序列化代码
1 2 3 4 5 6 7 8 9
| import pickle info = { 'name':"tom", "age" :"100" } f = open("test.txt",'wb') f.write(pickle.dumps(info)) f.close()
|
1 2 3 4 5 6
| #pickle反序列化代码 import pickle f = open("test.txt","rb") data = pickle.loads(f.read()) f.close() print(data["age"])
|
解决序列化datetime类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import json,datetime
class JsonCustomEncoder(json.JSONEncoder): def default(self, field): if isinstance(field, datetime.datetime): return field.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(field, datetime.date): return field.strftime('%Y-%m-%d') else: return json.JSONEncoder.default(self, field)
t = datetime.datetime.now()
print(type(t),t) f = open('ttt','w') f.write(json.dumps(t,cls=JsonCustomEncoder))
|
JSON和pickle模块的区别
- 1.JSON只能处理基本数据类型。pickle能处理所有Python的数据类型。
- 2.JSON用于各种语言之间的字符转换。
- pickle用于Python程序对象的持久化或者Python程序间对象网络传输,但不同版本的Python序列化可能还有差异
re
re模块常用方法
re.compile()
1
| regex=re.compile(pattern,flags=0)
|
re.findall()
1
| re.findall(pattern,string,flags=0)
|
根据正则表达式匹配目标字符串内容。
1
| re.findall(pattern,string,flags=0)
|
该函数的返回值是匹配到的内容列表,如果正则表达式有子组,则只能获取到子组对应的内容。参数说明如下:
- pattern:正则表达式对象。
- string:目标字符串
- flags:代表功能标志位,扩展正则表达式的匹配。
re.split()
- 该函数使用正则表达式匹配内容,切割目标字符串。返回值是切割后的内容列表。参数说明:
1
| re.split(pattern,string,flags = 0)
|
参数说明:
pattern:正则表达式。
string:目标字符串。
flags:功能标志位,扩展正则表达式的匹配。
re.sub
- 该函数使用一个字符串替换正则表达式匹配到的内容。返回值是替换后的字符串。其语法格式如下:
1
| re.sub(pattern,replace,string,max,flags = 0)
|
其参数说明:
pattern:正则表达式。
replace:替换的字符串。
string:目标字符串。
max:最多替换几处,默认替换全部,
flags:功能标志位,扩展正则表达式的匹配。
re.search()
- 匹配目标字符串第一个符合的内容,返回值为匹配的对象。语法格式如下:
1
| re.search(pattern,string,flags=0)
|
参数说明:
pattern:正则表达式
string:目标字符串
flags功能标志位
功能标志位的作用是扩展正则表达的匹配功能。常用的 flag 如下所示:
缩写元字符 | 说明 |
---|
A | 元字符只能匹配 ASCII码。 |
I | 匹配忽略字母大小写。 |
S | 使得. 元字符可以匹配换行符。 |
M | 使 ^ $ 可以匹配每一行的开头和结尾位置。 |
注意:可以同时使用福多个功能标志位,比如 flags=re.I|re.S。
下面使用贪婪和非贪婪两种模式来匹配 HTML 元素,分别,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import re
html=""" <div><p>www.biancheng.net</p></div> <div><p>编程帮</p></div> """
pattern=re.compile('<div><p>.*</p></div>',re.S)
re_list=pattern.findall(html) print(re_list)
pattern=re.compile('<div><p>.*?</p></div>',re.S) re_list=pattern.findall(html) print(re_list)
|
输出结果:
1 2
| ['<div><p>www.biancheng.net</p></div>\n<div><p>编程帮</p></div>'] ['<div><p>www.biancheng.net</p></div>', '<div><p>编程帮</p></div>']
|
正则表达式分组
- 通过正则表达式分组可以从匹配的信息中提取出想要的信息。示例- 演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| website="编程帮 www.biancheng.net"
pattern_1=re.compile('\w+\s+\w+\.\w+\.\w+') print(pattern_1.findall(website))
pattern_2=re.compile('(\w+)\s+\w+\.\w+\.\w+') print(pattern_2.findall(website))
pattern_3=re.compile('(\w+)\s+(\w+\.\w+\.\w+)') print(pattern_3.findall(website))
|
输出结果:
1 2 3
| ['编程帮 www.biancheng.net'] ['编程帮'] [('编程帮', 'www.biancheng.net')]
|
- 正则表达式分组是提取信息的常用方式。当需要哪个特定信息的时候,就可以通过分组(也就是加括号)的方式获得。