本篇只记录最基础的Python知识,不记录模块和具体程序,不涉及第三方库
软件安装:https://blog.csdn.net/Ailsa2019/article/details/105252766
位置可自定义, 一定要新建文件夹保存以保持整洁、避免误删
安装第三方库:CMD下输入【pip install xxx】
安装cryptography需指定版本号及更多参数,实测可用
pip install cryptography==2.4.2 --only-binary=:all:
查看已安装的所有库:CMD下输入【pip freeze】
常用的第三方库:pyinstaller, requests, lxml, selenium, pymysql, cryptography
手动下载(资源在墙外时可能要用到)
下载文件到【python>lib>site-packages】文件夹,然后CMD下输入【pip install 库名】
help() - 详细介绍,dir() - 功能列表,type() 类型——获取搜索关键词
continue:跳过该次循环,break:退出循环,return:结束整个方法,包括循环
lambda x,y:x+y
for key in L: Button(wi, command = lambda k=key:function(k))
for key in L: b.bind("", command = lambda self, k=key:function(k))
a = "1{}3"
a.format(2)
>>> '123'
x = 2
f"1{x}3"
>>> '123'
file.read()
open("test.txt").read().split("\n")[:-1] #比readline实用
L = [chr(i) for i in range(ord('a'),ord('z')+1)]
str有encode()函数,bytes有decode()函数
x = "x"
x.encode("gbk")
>>>b'x'
y = b"y"
y.decode()
>>>'y'
把特殊字符转化为普通字符。有些字符python无法print输出,也无法入sql数据表
import sys
non_bmp = dict.fromkeys(range(0x10000,sys.maxunicode + 1),0xfffd)
string = string.translate(non_bmp)
L.count(item)
从列表末尾提取一个元素,提取后,将元素从列表中删除
L.pop(0)
L = [ tup[0] for tup in L ]
D = { i:0 for i in L }
默认为升序,如果想要降序,设置reverse=True
L.sort(key=None, reverse=False)
L = [(2, 2), (3, 4), (4, 1), (1, 3)]
L.sort(key=lambda tup:tup[1])
>>>[(4, 1), (2, 2), (1, 3), (3, 4)]
range参数:起始位置,结束位置,步长。列表索引参数:起始位置,结束位置
L = [j for i in L for j in i]
L = [i[0] for i in L]
L = [L[i:i+step] for i in range(0, len(L), step)]
以第一个列表的元素为key,以第二个列表的元素为value,创建字典
dict(list(zip(L1, L2)))
语法【for i in A if i not in B】效率很低。因为【not in】要搜索完整个列表才能确认。此时,可以借助字典中转。
D = { i:0 for i in L1 } #按大表创建字典
for i in L2: D[i] = None #按小表改写字典
rows = [key for key in D if D[key] is not None] #只保留未被改写的key
D = {}
for tup in L1: D[tup[0]] = tup #按大表创建值
for tup in L2: D[tup[0]] = None #按小表改写值
rows = [D[key] for key in D if D[key] is not None] #未被改写的值
用系统默认浏览器打开网页。
url格式:https://www.baidu.com/。如果只有域名,系统会调用IE浏览器打开
webbrowser.open_new_tab(url)
输入路径,获取该路径下所有文件的绝对地址,以列表形式返回
from pathlib import Path
folder = Path("C:/Users/Administrator/Desktop/Emails")
paths = list(folder.iterdir())
L = os.listdir() #获取当前目录
old = [] #旧文件名列表
new = [] #新文件名列表
for root, dirs, files in os.walk("."): #遍历父文件夹files下的子文件夹
for file in files: #遍历子文件夹file下的文件
p = old.index(file)
o = os.path.join(root + "\\" + old[p])
n = os.path.join(root + "\\" + new[p])
os.rename(o, n) #修改文件名
import os
import shutil
for root, dirs, files in os.walk('总文件夹'):
for file in files:
old_name = os.path.join(root, file)
new_name = old_name.replace("\\", " ")
os.rename(old_name, new_name)
shutil.move(new_name, '总文件夹')
pyperclip.copy(string)
python的datetime模块功能类似
time.strftime('%Y-%m-%d %H:%M:%S')
time.strftime('%H:%M:%S',time.localtime())
time_ = time.strptime(time_, time_format)
time_ = time.strftime(new_format, time_)
date是在datetime模块下的子模块
import datetime
year = datetime.datetime.today() - datetime.timedelta(days=365)
year = year.strftime('%Y-%m-%d %H:%M:%S')
import email
e = email.message_from_bytes()
e = email.message_from_string()
e.get("subject") #从邮件元素中获取内容
from email import header
header.decode_header(line) #返回一个大列表,内部元组为(content, code)
from email import utils
email = utils.parseaddr(email)[1] #从姓名 <地址>中,提取地址(仅一组,鸡肋)
date = utils.parsedate_to_datetime(date) #日期转datetime格式
简单爬取用request,速度较快。深度爬取、模拟人工操作用selenium。
以爬取多个网站的标题为例:request成功需要逐项满足:没超时 + code为200 + 页面转text成功 + 提取title成功。逐个if太冗杂,用try墙内外各requests三次,仍然有35%访问出错
selenium进行超时设置后,不会出现异常,爬不到标题时,browser.title为空白
超时设置:driver.set_page_load_timeout(60)
url要带协议,可以设置cookies、是否验证安全性、限制时间。访问正常时,响应码为200
html = requests.get(url, cookies=cookies, verify=False, timeout=30)
html.text
html.status_code == 200
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
详见【疯狂Python 第10章 内置模块之正则表达式 re】
电话号码:1\d{10}\D。第一位是1 + 中间10位都是数字 +第12位不是数字
邮箱:\w+@\w+.\w+.\w+|\w+@\w+.\w+
来自https://emailregex.com/,短的都不好使
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])