python笔记四
#!/usr/bin/env python3
from datetime import datetime, timedelta
# datetime是模块,datetime模块还包含一个datetime类
now = datetime.now()
print(now) # 2019-09-19 11:20:42.173987
print(datetime(2019,9,19,11,21)) #2019-09-19 11:21:00
print(now.timestamp()) #1568863370.637641 转时间戳 Python的timestamp是一个浮点数。如果有小数位,小数位表示毫秒数
print(datetime.fromtimestamp(1568863370)) # 2019-09-19 11:22:50 时间戳转datetime
print(datetime.strptime('2019-9-19 11:33:20','%Y-%m-%d %H:%M:%S')) # 2019-09-19 11:33:20 字符串转datetime
print(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) #2019-09-19 11:36:13 把时间转字符串 # timedelta 处理时间加减
print(datetime.now() + timedelta(days=2,hours=1, minutes=20)) # 2019-09-21 13:01:41.009561 # namedtuple namedtuple是一个函数,它用来创建一个自定义的tuple对象,
# 并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素 from collections import namedtuple
# 具名元组
d = namedtuple('dot', ['a', 'b', 'c', 'd']) d = d(1,2,3,4)
print(d.a,d.b,d.c,d.d) #1 2 3 4 # 具名元组除了拥有继承自基本元组的所有方法之外,还提供了额外的几个方法和两个属性,为了防止命名冲突,这些方法都会以下划线开头 list = [1,2,3,4]
d._make(list) # 使用这个函数来构建具名元组实例
print(d) # dot(a=1, b=2, c=3, d=4) # 修改对象属性,使用"_replace"方法 不是直接修改原来的对象
mod = d._replace(a=11)
print(mod) # dot(a=11, b=2, c=3, d=4) # 对象转换成字典,使用"_asdict"
print(d._asdict()) # OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)]) # Base64是一种用64个字符来表示任意二进制数据的方法
# Base64编码会把3字节的二进制数据编码为4字节的文本数据,长度增加33%,好处是编码后的文本数据可以在邮件正文、网页等直接显示
# Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据
import base64
# 转base64
b = base64.b64encode('我是谁啊'.encode('utf-8'))
print(b)
#
print(base64.b64decode(b)) # 由于标准的Base64编码后可能出现字符+和/,在URL中就不能直接作为参数,所以又有一种"url safe"的base64编码,其实就是把字符+和/分别变成-和_
# base64.urlsafe_b64encode()
# base64.urlsafe_b64decode() # MD5
# 由于常用口令的MD5值很容易被计算出来,所以,要确保存储的用户口令不是那些已经被计算出来的常用口令的MD5,
# 这一方法通过对原始口令加一个复杂字符串来实现,俗称“加盐”:
# md5(message + salt) import hashlib md5 =hashlib.md5()
md5.update('hello leyi'.encode('utf-8'))
print(md5.hexdigest()) # 2fd60377888d53f6dafef6f8da3c09c2 # 如果数据量很大,可以分块多次调用update(),结果一样
md5.update('hello'.encode('utf-8'))
md5.update(' leyi'.encode('utf-8'))
print(md5.hexdigest()) #2fd60377888d53f6dafef6f8da3c09c2 # 另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似
sha1 = hashlib.sha1() # Python自带的hmac模块实现了标准的Hmac算法,跟md5加盐加密类似 import hmac # hmac.new(key, message, digestmod='MD5') digestmod 为采用的算法
secret = hmac.new('关键字盐'.encode('utf-8'), '需要加密内容'.encode('utf-8'), digestmod='MD5')
print(secret.hexdigest()) # urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应
from urllib import request, parse
import ssl ssl._create_default_https_context = ssl._create_unverified_context # req = request.Request('http://api-doc.xxx.cn/api/user/login')
# req.add_header('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36')
# req.add_header('Origin', 'http://api-doc.xxx.cn')
# req.add_header('Referer', 'http://api-doc.xxx.cn/login')
#
# name = input('输入账户:')
# password = input('输入密码:')
# login_data = parse.urlencode([
# ('email', name),
# ('password', password),
# ])
#
# with request.urlopen(req, data = login_data.encode('utf-8')) as f:
# d = f.read()
# print(dir(f))
# print(f.status)
# print(d.decode('utf-8')) from html.parser import HTMLParser # 继承HTMLParser
class ReWriteHTMLParser(HTMLParser): def __init__(self):
HTMLParser.__init__(self)
self.metas = [] # 重写
def handle_starttag(self, tag, attrs):
if tag == "meta":
if len(attrs) == 0:
pass
else:
for (key, value) in attrs:
if (key == "content"):
self.metas.append(value) parser = ReWriteHTMLParser()
parser.feed(
'''
<meta id="cross-request-sign" charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="keywords" content="yapi接口管理,api管理,接口管理,api,接口,接口文档,api文档,接口管理系统" />
<meta name="description" content="YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。" />
<title>YApi-高效、易用、功能强大的可视化接口管理平台</title>
<link rel="icon" type="image/png" sizes="192x192" href="/image/favicon.png">
<script>
document.write('<script src="/prd/assets.js?v=' + Math.random() + '"><\/script>');
</script> <script>
document.write('<link rel="stylesheet" href="/prd/' + window.WEBPACK_ASSETS['index.js'].css + '" />');
</script>
'''
)
# ['width=device-width, initial-scale=1, shrink-to-fit=no',
# 'yapi接口管理,api管理,接口管理,api,接口,接口文档,api文档,接口管理系统',
# 'YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。
# 可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,
# 开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。']
print(parser.metas) # 获取开始标签为meta attrs个数不为0的content值集合
python笔记四的更多相关文章
- guxh的python笔记四:迭代
1,可迭代对象iterable,迭代器iterator,生成器generator 可迭代对象iterable: 实现__iter__方法的类.__iter__方法返回iterator或者generat ...
- Python笔记(四)_字符串的方法
字符串的方法 []表示该参数时可选的,start和end参数表示范围 count(sub[, start[, end]]) 返回sub在字符串里边出现的次数 find(sub[, start[, en ...
- python笔记四(dict/set/不可变对象)
一.dict 字典是包含key_value存储方式.在放进去的时候,必须根据key值Hash出value的存放位置,这样,取的时候才能根据key直接拿到value. dict的操作: d = {'Mi ...
- python笔记四:面向对象
1.类 class Student(object): def __init__(self, name, score): self.name = name self.score = score 1)__ ...
- s21day22 python笔记
s21day22 python笔记 一.内容回顾及补充 模块补充 importlib.import_module:通过字符串的形式导入模块 #示例一: import importlib # 用字符串的 ...
- s21day21 python笔记
s21day21 python笔记 一.内容回顾及补充 内置函数补充 type():查看数据类型 class Foo: pass obj = Foo() if type(obj) == Foo: pr ...
- s21day13 python笔记
s21day13 python笔记 一.装饰器 目的:在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能 应用场景:想要为函数扩展功能时,可以选择用装饰器 装饰器基本格式: def ...
- guxh的python笔记一:数据类型
1,基本概念 1.1,数据类型 基本数据类型:字符串,数字,布尔等 引用数据类型:相对不可变(元组),可变(列表,字典,集合等) 基本数据类型存放实际值,引用数据类型存放对象的地址(即引用) ==:判 ...
- s21day10 python笔记
s21day10 python笔记 一.函数补充 1.1 参数 基本参数知识 def get_list_date(aaa): #aaa:形式参数(形参) 任意个数 v = [11,22,33,44] ...
随机推荐
- word embedding 精要整理
word embedding 具体含义:词的实数向量化表示,可以通过向量相似性度量语义相似性,相似性原理是上下文的一致性 Embedding在数学上表示一个maping, f: X -> Y, ...
- 使用sqlyog工具同步两个相同结构的数据库之间的数据
compare two database data 因为工作上遇到 同一个项目被部署到不同服务器上,原项目(后统称"源")在运行中,后部署的项目(后统称"目标" ...
- 小程序登录时如何获取input框中的内容
最近写小程序项目遇到一些问题,今天整理下这些问题的解决方法,希望对用户有帮助.下面是登录页,点击登录时获取input框中的值, 效果如下: wxml布局如下: <view > <in ...
- 49. ArrayList LinkedList中特有的方法
集合的体系:--------------| Collection 单列集合的根接口 ----------| List 如果实现了List接口的集合类,该类具备的特点是:有序,可重复 ------|A ...
- TS-接口
接口 TS的核心原则之一是对值所具有的结构进行类型检测 接口初探 function printLabel(labelledObj: { label: string }) { console.log(l ...
- 【Http】keepalive
http是现在web领域极其普遍的应用层传输协议, 目前常见的使用版本则是http1.1, 当然最先版本是http2.0. 传统的Http应用里都是一次TCP连接一次request. image ...
- bzoj3505: [Cqoi2014]数三角形 [数论][gcd]
Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和 ...
- 「题解」:x
问题 A: x 时间限制: 1 Sec 内存限制: 256 MB 题面 题面谢绝公开. 题解 赛时想到了正解并且对拍了很久.对拍没挂,但是评测姬表示我w0了……一脸懵逼. 不难证明,如果对于两个数字 ...
- bzoj1001题解
[解题思路] 显然,这题的答案是这个网格图的最小割.根据最大流-最小割定理,我们可以用网络流算法来求其最小割,时间复杂度最小为O(V2√E). 特殊的,这个网格图是一个平面图,于是可以根据平面图最小割 ...
- NX二次开发-UFUN编辑图层类别描述UF_LAYER_edit_category_descr
1 NX11+VS2013 2 3 #include <uf.h> 4 #include <uf_layer.h> 5 6 7 UF_initialize(); 8 9 //创 ...