争取写完,持续更新
文章目录
一.sys
1.platfrom方法识别操作系统
import sys
print(sys.platform)
win32
2.argv方法获取命令行参数
import sys
print(sys.argv)
[‘D:/Code/python/Draft/1.py’]
3.exit方法退出程序
import sys
for i in range(5):
print(i)
if i > 2:
sys.exit(1)
0
1
2
3
4.path方法获取模块搜索路径
import sys
for path in sys.path:
print(path)
D:\Develop\python
C:\Users\yh\AppData\Roaming\Python\Python39\site-packages
D:\Develop\python\lib\site-packages
D:\Develop\python\lib\site-packages\django-3.0.11-py3.9.egg
D:\Develop\python\lib\site-packages\asgiref-3.3.1-py3.9.egg
D:\Develop\python\lib\site-packages\pip-20.3.3-py3.9.egg
D:\App\PyCharm 2020.3.2\plugins\python\helpers\pycharm_matplotlib_backend
5.modules方法查找已导入的模块
import sys
print(sys.modules.keys())
D:\Develop\python\python.exe D:/Code/python/Draft/1.py
dict_keys([‘sys’, ‘builtins’, ‘_frozen_importlib’, ‘_imp’, ‘_thread’, ‘_warnings’, ‘_weakref’, ‘_frozen_importlib_external’, ‘nt’, ‘_io’, ‘marshal’, ‘winreg’, ‘time’, ‘zipimport’, ‘_codecs’, ‘codecs’, ‘encodings.aliases’, ‘encodings’, ‘encodings.utf_8’, ‘_signal’, ‘encodings.latin_1’, ‘_abc’, ‘abc’, ‘io’, ‘main’, ‘_stat’, ‘stat’, ‘_collections_abc’, ‘genericpath’, ‘ntpath’, ‘os.path’, ‘os’, ‘_sitebuiltins’, ‘_locale’, ‘_bootlocale’, ‘_codecs_cn’, ‘_multibytecodec’, ‘encodings.gbk’, ‘_heapq’, ‘heapq’, ‘itertools’, ‘keyword’, ‘_operator’, ‘operator’, ‘reprlib’, ‘_collections’, ‘collections’, ‘types’, ‘_functools’, ‘functools’, ‘enum’, ‘_sre’, ‘sre_constants’, ‘sre_parse’, ‘sre_compile’, ‘copyreg’, ‘re’, ‘token’, ‘tokenize’, ‘linecache’, ‘traceback’, ‘sitecustomize’, ‘site’])
Process finished with exit code 0
二.os
1.dirname方法获取当前路径
import os
print(os.path.dirname(__file__))
D:\Code\python\Draft
2.getcwd方法获取当前路径,chdir方法切换路径
import os
print(os.getcwd())
os.chdir("D:\\")
print(os.getcwd())
D:\Code\python\Draft
D:\
3.rename方法可以重命名文件
import os
os.rename("a.txt", "b.txt")
4.exits方法可以查看文件是否存在
import os
print(os.path.exists('a.txt'))
False
5.isfile方法判断是否是一个文件
import os
print(os.path.isfile('b.txt'))
True
6.isdir方法判断路径是否是一个目录
import os
print(os.path.isdir("c:\\"))
True
7.environ方法获取系统变量
import os
for k, v in os.environ.items():
print(k, "=>", v)
ALLUSERSPROFILE => C:\ProgramData
APPDATA => C:\Users\yh\AppData\Roaming
COMMONPROGRAMFILES => C:\Program Files\Common Files
COMMONPROGRAMFILES(X86) => C:\Program Files (x86)\Common Files
COMMONPROGRAMW6432 => C:\Program Files\Common Files
COMPUTERNAME => LAPTOP-J8VS29QD
COMSPEC => C:\WINDOWS\system32\cmd.exe
DRIVERDATA => C:\Windows\System32\Drivers\DriverData
FPS_BROWSER_APP_PROFILE_STRING => Internet Explorer
FPS_BROWSER_USER_PROFILE_STRING => Default
HOMEDRIVE => C:
HOMEPATH => \Users\yh
IDEA_INITIAL_DIRECTORY => C:\Users\yh\Desktop
LOCALAPPDATA => C:\Users\yh\AppData\Local
LOGONSERVER => \LAPTOP-J8VS29QD
NUMBER_OF_PROCESSORS => 12
ONEDRIVE => C:\Users\yh\OneDrive
ONEDRIVECONSUMER => C:\Users\yh\OneDrive
OS => Windows_NT
PATH => D:\App\VMware\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Windows\System32\OpenSSH;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files (x86)\Intel\Intel® Management Engine Components\DAL;C:\Program Files\Intel\Intel® Management Engine Components\DAL;C:\Program Files\Intel\WiFi\bin;C:\Program Files\Common Files\Intel\WirelessCommon;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;D:\App\Git\cmd;D:\App\Xshell;D:\App\Node;D:\Develop\jdk\bin;D:\Develop\mingw64\bin;D:\Develop\python\Lib\site-packages\Django-3.0.11-py3.9.egg\django;D:\Develop\python\Scripts;D:\Develop\python\Scripts;D:\Develop\python;C:\Users\yh\AppData\Local\Microsoft\WindowsApps;;D:\App\Microsoft VS Code\bin;C:\Users\yh\AppData\Roaming\npm;D:\App\PyCharm 2020.3.2\bin;
PATHEXT => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE => AMD64
PROCESSOR_IDENTIFIER => Intel64 Family 6 Model 158 Stepping 13, GenuineIntel
PROCESSOR_LEVEL => 6
PROCESSOR_REVISION => 9e0d
PROGRAMDATA => C:\ProgramData
PROGRAMFILES => C:\Program Files
PROGRAMFILES(X86) => C:\Program Files (x86)
PROGRAMW6432 => C:\Program Files
PSMODULEPATH => C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
PUBLIC => C:\Users\Public
PYCHARM => D:\App\PyCharm 2020.3.2\bin;
PYCHARM_DISPLAY_PORT => 63342
PYCHARM_HOSTED => 1
PYTHONIOENCODING => UTF-8
PYTHONPATH => D:\Code\python;D:\Code\python\Stdent;D:\App\PyCharm 2020.3.2\plugins\python\helpers\pycharm_matplotlib_backend;D:\App\PyCharm 2020.3.2\plugins\python\helpers\pycharm_display
PYTHONUNBUFFERED => 1
SESSIONNAME => Console
SYSTEMDRIVE => C:
SYSTEMROOT => C:\WINDOWS
TEMP => C:\Users\yh\AppData\Local\Temp
TMP => C:\Users\yh\AppData\Local\Temp
USERDOMAIN => LAPTOP-J8VS29QD
USERDOMAIN_ROAMINGPROFILE => LAPTOP-J8VS29QD
USERNAME => yh
USERPROFILE => C:\Users\yh
WINDIR => C:\WINDOWS
8.mkdir方法创建单层目录
9.mkdirs方法创建多层目录
三.math
1.常量圆周率和自然常数e
import math
print(math.pi)
print(math.e)
3.141592653589793
2.718281828459045
2.ceil函数向上取整,floor函数向下取整
import math
print(math.ceil(math.pi))
print(math.floor(math.pi))
4
3
3.pow函数为指数运算
import math
print(math.pow(2, 3))
8.0
4.log函数为对数运算,默认底数为e,第二个参数可以设置底数
import math
print(math.log(3))
print(math.log(100, 10))
1.0986122886681098
2.0
5.sqrt函数为平方根计算
import math
print(math.sqrt(4))
2.0
6.三角函数计算
import math
print(math.sin(1))
print(math.cos(math.pi))
0.8414709848078965
-1.0
7.角度与弧度转化
import math
print(math.degrees(math.pi))
print(math.radians(90))
180.0
1.5707963267948966
四.random
1.random方法用于产生0到1之间的随机浮点数
import random
print(random.random())
0.6666132029039157
2.randint方法产生指定区间的随机数
import random
print(random.randint(1, 100))
58
3.choice方法获取序列中的一个随机数
import random
a = (1, 5, 8, 9, 6, 7, 4)
print(random.choice(a))
1
4.shuffle方法将序列打乱
import random
a = [1, 5, 8, 9, 6, 7, 4]
random.shuffle(a)
print(a)
[7, 1, 9, 6, 4, 5, 8]
五.time
1.time函数用于返回当前的时间戳(格林尼治时间起至现在的总秒数)
import time
now = time.time()
print(now)
1611303060.773287
2.localtime函数用于将时间戳格式转化为本地时间,返回(struct_time)对象
import time
now = time.localtime()
print(now)
time.struct_time(tm_year=2021, tm_mon=1, tm_mday=22, tm_hour=16, tm_min=14, tm_sec=30, tm_wday=4, tm_yday=22, tm_isdst=0)
3.mktime函数接收struct_time返回用秒数表示时间的浮点数
import time
now = time.localtime()
print(now)
s = time.mktime(now)
print(s)
time.struct_time(tm_year=2021, tm_mon=1, tm_mday=22, tm_hour=16, tm_min=21, tm_sec=1, tm_wday=4, tm_yday=22, tm_isdst=0)
1611303661.0
4.gmtime函数可以将时间戳转化为0时区的struct_time
import time
now = time.time()
print(now)
s = time.gmtime(now)
print(s)
1611303823.960081
time.struct_time(tm_year=2021, tm_mon=1, tm_mday=22, tm_hour=8, tm_min=23, tm_sec=43, tm_wday=4, tm_yday=22, tm_isdst=0)
5.asctime函数可以接收struct_time返回可读的时间形式
import time
now = time.time()
print(now)
s = time.gmtime(now)
print(s)
new = time.asctime(s)
print(new)
1611303959.5288363
time.struct_time(tm_year=2021, tm_mon=1, tm_mday=22, tm_hour=8, tm_min=25, tm_sec=59, tm_wday=4, tm_yday=22, tm_isdst=0)
Fri Jan 22 08:25:59 2021
6.ctime函数可以把时间戳转化为可读形式
import time
now = time.time()
print(now)
s = time.ctime(now)
print(s)
1611304057.0304146
Fri Jan 22 16:27:37 2021
7.sleep函数推迟调用线程的运行,参数为秒
import time
print("start:", time.ctime())
time.sleep(9)
print("end:", time.ctime())
start: Fri Jan 22 16:29:58 2021
end: Fri Jan 22 16:30:07 2021
8.strftime函数接收时间元组,返回可读的当地时间
9.strptime函数可以将时间字符解析为时间元组
六.datetime
1.date对象
import datetime
print(datetime.MAXYEAR) # 支持的最大年份
print(datetime.MINYEAR) # 支持的最小年份
print(datetime.date.today()) # today返回当天日期
print(datetime.date.today().weekday()) # weekday放回当天的星期
print(datetime.date.today().isoformat()) # 返回IOS格式
9999
1
2021-01-22
4
2021-01-22
2.time对象
import datetime
print(datetime.time()) # 默认时间
print(datetime.time.max) # 支持的最大时间
print(datetime.time.min) # 支持的最小时间
00:00:00
23:59:59.999999
00:00:00
3.datetime对象
datetime=date+time,同时返回日期和时间
import datetime
today = datetime.datetime.today()
print(today)
print(datetime.datetime.now()) # 与today用法相同
print(datetime.datetime.utcnow()) # 0时区时间
now = datetime.datetime.now()
print(now.date()) # date对象返回日期
print(now.time()) # time对象返回时间
2021-01-22 18:22:42.380595
2021-01-22 18:22:42.382589
2021-01-22 10:22:42.382589
2021-01-22
18:22:42.382589
4.timedelta对象
表示时间差
import datetime
dt1 = datetime.datetime.now()
dt2 = datetime.timedelta(weeks=2) + dt1
print(dt1)
print(dt2)
print(dt1 - dt2)
2021-01-22 18:34:31.429461
2021-02-05 18:34:31.429461
-14 days, 0:00:00
5.tzinfo对象
七.calendar
1.calendar.isleap用于判断闰年
import calendar
print(calendar.isleap(2000))
print(calendar.isleap(2018))
True
False
2.canlender.leapdays用于返回两个年份之间闰年的总数
import calendar
print(calendar.leapdays(1900,2000))
24
3.canlender.month方法用于制作日历
四个参数:theyear,themonth,w(字符间距),l(行间距)
import calendar
print(calendar.month(2021,1))
4.calendar.monthcalender方法返回一个单层嵌套列表,每个列表里面装载一个星期
import calendar
print(calendar.monthcalendar(2021,1))
[[0, 0, 0, 0, 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]]
5.calendar.monthrange方法返回两个整数组成的元组,第一个数表示该月的第一天是星期几,第二个数表示改月的天数
import calendar
print(calendar.monthrange(2021,1))
(4, 31)
6.calendar.weekday方法返回给定日期的星期码
import calendar
print(calendar.weekday(2021,1,1))
4
7.calendar.calendar返回整年月历
import calendar
print(calendar.calendar(2021))
八.smtplib+email
1.smtp.sendmail(sender,recever,message.as_string())方法用于发送邮件,参数分别为邮件发送者地址,接收者地址,发送方式(一般使用字符串)
2.Header方法用于构造message对象
3.MIMEText用于构造邮件内容
4.smtp.login(sender,password)方法用登录
from email import message
from email import header
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = "10791894@qq.com"
password = "邮箱授权码"
recever = ["10791894@qq.com", ]
message = MIMEText("邮件内容", "plain", "utf-8")
message["From"] = Header("发件人显示的名字", "utf-8")
message["To"] = Header("yh", "utf-8")
message["Subject"] = "text"
try:
smtp = smtplib.SMTP_SSL("smtp.qq.com")
smtp.login(sender, password)
smtp.sendmail(sender, recever, message.as_string())
print("邮件已经发送")
except smtplib.SMTPException as e:
print("出错", e)
邮件已经发送
5.MIMEText的第二个参数改成"html"可以发送html格式的电子邮件
from email import message
from email import header
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = "10791894@qq.com"
password = "邮箱授权码"
recever = ["10791894@qq.com", ]
mail_html = """
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<a href="http://www.baidu.com">百度一下</a>
</body>
</html>
"""
message = MIMEText(mail_html, "html", "utf-8")
message["From"] = Header("发件人显示的名字", "utf-8")
message["To"] = Header("yh", "utf-8")
message["Subject"] = "text"
try:
smtp = smtplib.SMTP_SSL("smtp.qq.com")
smtp.login(sender, password)
smtp.sendmail(sender, recever, message.as_string())
print("邮件已经发送")
except smtplib.SMTPException as e:
print("出错", e)
"""
message=MIMEText(mail_html,"html","utf-8")
message["From"]=Header("发件人显示的名字","utf-8")
message["To"]=Header("yh","utf-8")
message["Subject"]="text"
try:
smtp=smtplib.SMTP_SSL("smtp.qq.com")
smtp.login(sender,password)
smtp.sendmail(sender,recever,message.as_string())
print("邮件已经发送")
except smtplib.SMTPException as e:
print("出错",e)
邮件已经发送
6.MIMEMultipart对象,attach方法可以添加附件
from email import message
from email import header
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
sender = "10791894@qq.com"
password = "邮箱授权码"
recever = ["10791894@qq.com", ]
mail_html = """
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<a href="http://www.baidu.com">百度一下</a>
</body>
</html>
"""
message = MIMEMultipart() # 指定消息使用复合型
message["From"] = Header("发件人显示的名字", "utf-8")
message["To"] = Header("yh", "utf-8")
message["Subject"] = "text"
f = open("test.txt", "w", encoding="utf-8")
f.write("test")
f.close()
message.attach(MIMEText(mail_html, "html", "utf-8"))
attach_file = MIMEText(open("test.txt", encoding="utf-8").read(), "base64", "utf-8")
attach_file["Content-Disposition"] = 'attachment;filename="mail.py"'
message.attach(attach_file)
try:
smtp = smtplib.SMTP_SSL("smtp.qq.com")
smtp.login(sender, password)
smtp.sendmail(sender, recever, message.as_string())
print("邮件已经发送")
except smtplib.SMTPException as e:
print("出错", e)
邮件已经发送
九.IO
1.StringIO对象可以直接写入文件,操作对象为str
2.BytesIO对象实现在内存中读取Bytes
十.re
1.compile函数用于生成正则对象
import re
pattern = re.compile(r'\w+') # 可以用pattern对象进行正则匹配
2.match函数用于查找字符串指定位置
import re
pattern = re.compile(r'\d+') # 可以用pattern对象进行正则匹配
m1 = pattern.match('noe123')
print(m1) # 返回none
m2 = pattern.match('one123', 3, 6) # 匹配从位置3到位置6的字符
print(m2) # 返回match对象
print(m2.group())
None
<re.Match object; span=(3, 6), match=‘123’>
123
3.search函数用于查找字符串指定位置,相比match方法,search函数只需字符串包含匹配正则匹配的子串就认为匹配
import re
pattern = re.compile(r'\d+') # 可以用pattern对象进行正则匹配
m1 = pattern.search('noe123')
print(m1) # 返回对象
print(m1.group())
<re.Match object; span=(3, 6), match=‘123’>
123
4.findall方法是完全匹配,match和search是一次匹配,只有找到一个结果就返回
import re
pattern = re.compile(r'\d{2}') # 可以用pattern对象进行正则匹配
m1 = pattern.findall('noe1235556')
print(m1) # 返回none
[‘12’, ‘35’, ‘55’]
5.spilt方法可以用正则表达式规则分割字符串
import re
pattern = re.compile(r'\d{2}') # 可以用pattern对象进行正则匹配
m1 = pattern.split('noe1235556')
print(m1) # 返回none
[‘noe’, ‘’, ‘’, ‘6’]
6.sub方法可以用正则表达式规则替换字符串
import re
pattern = re.compile(r'\d{2}') # 可以用pattern对象进行正则匹配
m1 = pattern.sub('99', 'noe1235556')
print(m1) # 返回none
noe9999996
十一.requests
这里使用请求测试接口http://httpbin.org/get
1.get
import requests
r = requests.get('http://httpbin.org/get')
print(r.text)
{
“args”: {},
“headers”: {
“Accept”: “/”,
“Accept-Encoding”: “gzip, deflate”,
“Host”: “httpbin.org”,
“User-Agent”: “python-requests/2.25.1”,
“X-Amzn-Trace-Id”: “Root=***********”
},
“origin”: “**********”,
“url”: “http://httpbin.org/get”
}
2.post
import requests
r = requests.post('http://httpbin.org/post', data={'key': 'value'})
print(r.text)
{
“args”: {},
“data”: “”,
“files”: {},
“form”: {
“key”: “value”
},
“headers”: {
“Accept”: “/”,
“Accept-Encoding”: “gzip, deflate”,
“Content-Length”: “9”,
“Content-Type”: “application/x-www-form-urlencoded”,
“Host”: “httpbin.org”,
“User-Agent”: “python-requests/2.25.1”,
“X-Amzn-Trace-Id”: “Root=******”
},
“json”: null,
“origin”: “***************”,
“url”: “http://httpbin.org/post”
}
十二.pickle
1.pickle.dumps方法可以把对象序列化成bytes
import pickle
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
student1 = Student('YH', 18)
print(pickle.dumps(student1))
序列化结果:
b’\x80\x04\x954\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main__\x94\x8c\x07Student\x94\x93\x94)\x81\x94}\x94(\x8c\x04name\x94\x8c\x02YH\x94\x8c\x03age\x94K\x12ub.’
2.pickle.dump方法可以把对象序列化,然后直接写入文件中。
import pickle
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
student1 = Student('YH', 18)
print(pickle.dumps(student1))
with open('test.data', 'wb') as f:
pickle.dump(student1, f)
写入结果
是一个二进制文件,文本框打开会乱码
��4
这时候就已经把序列化的内容保存到文件中了。
3.pickle.loads方法将序列化内容反序列化
import pickle
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
# student1=Student('YH',18)
# print(pickle.dumps(student1))
# with open('test.data','wb') as f:
# pickle.dump(student1,f)
f = open('test.data', 'rb')
data = f.read() # 这里的data仍然是序列化内容
student1 = pickle.loads(data)
f.close()
print(student1.name, student1.age)
运行结果
从这里看出文件中的序列化内容已经被正确读取。
4.注意
pickle的序列化和反序列化操作只能用于python而不能被其他语言读取,并且不同版本的python之间也可能存在兼容性问题。
十三.hashlib
1.md5加密
import hashlib
def md5(content):
return hashlib.md5(content.encode()).hexdigest()
message = '东北大学'
print('一次加密:', md5(message))
print('二次加密:', md5(md5(message)))
一次加密: 5cd4f88d13c3119a7fe6171be680cc74
二次加密: 25ed8c88d5f7e5739747a86c8ce22011
2.SHA加密
import hashlib
def sha_(content):
return hashlib.sha1(content.encode()).hexdigest()
message = '东北大学'
print('一次加密:', sha_(message))
print('二次加密:', sha_(sha_(message)))
一次加密: b44c0e7b65c87666fadc6428545dc0dc5d2ac237
二次加密: 79beea275a499f259d6f69d5d2f37301977d1d26