内置方法, 第三方模块(math, random, pickle, json, time, os, shutil, zip, tarfile), 导入包

内置方法和第三方模块汇总

1. 内置方法:

# 1. abs():返回一个数的绝对值,返回整型
res = abs(-3)
print(res) # 3

# 2.round():返回浮点型四舍五入后的整数结果,奇进偶不进
res = round(3.4)
print(res) # 3
res = round(3.51)
print(res) # 4
res = round(3.5)
print(res) # 4 当小数部分是5时,整数部分是奇数时,往前进一位
res = round(2.5)
print(res) # 2  当小数部分是5时,整数部分是偶数时,不进位

# 3. sum(): 计算一个序列的和
res = sum([1,2,3])
print(res) # 6

# 4. max()和min(): 获取一个数列的最大值和最小值,跟sorted用法类似,后面可以跟函数
list1 = [23,62,-76,-23,12]
def func1(n):
    return abs(n)
res1 = max(list1,key=func1)
print(res1) # -76
res2 = min(list1,key=func1)
print(res2) # 12

# 5. pow(): 计算一个值的N次方,如果有第三个参数,代表得到的结果再与第三个参数取余
res = pow(2,3)
print(res) # 8
res = pow(2,3,3)
print(res) # 2  如果有第三个参数的话就代表第一个参数计算次方后再与第三个数取余

# 6. range(): 获取数据的取值范围
for i in range(2,8,2):
    print(i)   # 2,4,6

# 7. bin(), oct(), hex(): 获取数字的二进制, 八进制, 十六进制
print(bin(8)) # 0b1000
print(oct(8)) # 0o10
print(hex(8)) # 0x8

# 8. chr(), ord(): 将ASCII码转换为字符, 将字符转化为ASCII码
print(chr(98)) # b
print(chr(66)) # B
print(ord("A")) # 65
print(ord("n")) # 110

# 9. eval(): 可将字符串当做python代码执行,但是像变量之类的eval就执行不了,程序会报错
a = "print('我是字符串')"
eval(a) # 我是字符串
# res = "a=10"
# eval(res)  # 报错

# 10. exec(): 将字符串当做python代码执行,功能比eval强大,可以执行定义变量的字符串
res = "a = 20"
exec(res)
print(a) # 20
# eval()和exec()方法在和用户交互数据的时候要谨慎使用,有一定的安全风险

# 10. repr(): 不转义字符,原样输出
print(repr("
换行符")) # '
换行符'

# 11. input(): 等待输入字符串

# 12. hash(): 生成哈希值,相同的值生成的哈希值一样,哈希值可用于密码设定和文件校验,若两个文件的哈希值一样,则两个文件的内容一样
a = "字符串"
b = "字符串"
print(hash(a)) # -5730857187798895990
print(hash(b)) # -5730857187798895990

2. 数学模块: math

import math
# 1.ceil()方法: 向上取整,返回整型
res = math.ceil(3.3)
print(res) # 4
res = math.ceil(3.9)
print(res) # 4

# 2. floor()方法: 向下取整,返回整型
res = math.floor(3.3)
print(res) # 3
res = math.floor(3.9)
print(res) # 3

# 3. pow()方法: 计算一个数的N次方,返回浮点型
res = math.pow(3,2)
print(res) # 9.0

# 4. sqrt()方法: 开平方运算,返回浮点型
res = math.sqrt(16)
print(res) # 4.0

# 5. fabs()方法: 返回一个数的绝对值,类型为浮点型
res = math.fabs(-3)
print(res) # 3.0

# 6. mosf()方法: 将一个浮点型数字拆成小数部分和整数部分,组成一个元祖
res = math.modf(-13.6)
print(res) # (-0.5999999999999996, -13.0)

# 7. copysign()方法:将第二个数的正负号拷贝给第一个数,返回浮点型
res = math.copysign(3,-6)
print(res) # -3.0
res = math.copysign(-3,-6)
print(res) # -3.0

# 8. 圆周率pi
res = math.pi
print(res) # 3.141592653589793

3. 随机模块: randon

import random
# 1. random(): 随机获取0~1之间的小数,左闭右开(0<=x<1)
print(random.random()) # 每次获取的值不一样

# 2. randrange():可获取指定范围内的整数,包含起始值,不包含结束值
res = random.randrange(5)  # 从0~4的范围内随机取一个整数
print(res)
res = random.randrange(2,5)  # 从2~4的范围内随机取一个整数
print(res)
res = random.randrange(2,8,2)  # 从2~7的范围内隔一个数随机取一个整数,就是从2,4,6中取值
print(res)

# 3. randint()从指定范围内随机取一个整数,可以取到最大值,必须只包含两个参数,不能指定步长(了解)
res = random.randint(2,8)
print(res)

# 4. uniform(): 获取指定范围内的随机小数,左闭右开
res = random.uniform(1,3.6)  # 指定范围可以是整数也可以是小数 1<=x<3.6
print(res)

res = random.uniform(3,1)  # 指定范围可以是整数也可以是小数 1<x<=3
print(res)

# 5. choise(): 随机获取列表中的一个值(多选一)
list1 = ["蓝天","白云","绿叶"]
res = random.choice(list1)
print(res)

# 6. sample(): 随机获取列表中的若干个值,多选多,返回列表
list1 = ["蓝天","白云","绿叶","星星","月亮"]
res = random.sample(list1,2)  # 从list1中随机抽两个值,组成列表返回
print(res)

# 7.shuffle():随机打乱序列中的值
list1 = ["蓝天","白云","绿叶","星星","月亮"]
random.shuffle(list1) # 在原列表的基础上直接打乱
print(list1)

3.1  验证码小案例:

import random
def yanzhengma():
    str1 = ""
    for i in range(4):
        b_word = chr(random.randrange(65,91))
        s_word = chr(random.randrange(97,123))
        num = str(random.randrange(10))
        list1 = [b_word,s_word,num]
        str1 += random.choice(list1)
    return str1
res = yanzhengma()
print(res)

 4. 序列化模块pickle: 文件中只能存贮字符串或者字节流,不能存贮在文件里面的数据变得可存贮的过程是序列化,将文件中的数据取出,恢复成原来的样子,是反序列化

 4.1 dumps和loads:  dumps将任意一个对象序列化成一个bytes, loads将任意bytes反序列成原来的数据

import pickle
# 1. 序列化列表
list1 = [1,2,3]
res = pickle.dumps(list1)
print(res) # b'x80x03]qx00(Kx01Kx02Kx03e.'

# 2.序列化函数
def func1():
    print("我是函数")
res = pickle.dumps(func1)
print(res) # b'x80x03c__main__
func1
qx00.'

# 3. 序列化迭代器
it = iter([1,2,3])
res1 = pickle.dumps(it)
print(res1) # b'x80x03cbuiltins
iter
qx00]qx01(Kx01Kx02Kx03ex85qx02Rqx03Kx00b.'

# loads()将任意对象反序列化成原来的样子
it2 = pickle.loads(res1)
res = list(it2)
print(res) # [1, 2, 3]

4.2  dump()和load(): 

# 用dumps和loads进行文件操作
import pickle
list1 = [1, 2, 3]
with open(r"C:UsersRachel LiuDesktop代码Day15名单1.txt",mode="wb") as f1:
    res = pickle.dumps(list1)
    f1.write(res)
with open(r"C:UsersRachel LiuDesktop代码Day15名单1.txt",mode="rb") as f2:
    res = f2.read()
    res2 = pickle.loads(res)
    print(res2) # [1, 2, 3]

# dump()和load(): dump()可将对象序列化后直接写进文件对象里,load()把文件里的数据取出反序列化成原来的样子
# 用dump和load进行文件操作
list1 = [1, 2, 3]
with open(r"C:UsersRachel LiuDesktop代码Day15名单1.txt",mode="wb") as f1:
    pickle.dump(list1,f1)

with open(r"C:UsersRachel LiuDesktop代码Day15名单1.txt",mode="rb") as f2:
    res = pickle.load(f2)
    print(res) # [1, 2, 3]

5. 序列化模块 json:  所有序列化模块都能识别的数据叫做json,是字符串.能够通过json序列化成字符串的有(int,float,bool,str,list,tuple,dict,None)

import json
list1 = [1,3,2]
res =json.dumps(list1,ensure_ascii=False , sort_keys=True)  # ensure_ascii默认是True,显示Unicode,改为False 不通过ASCII码来显示内容,sort_key是用来排序的
print(res , type(res)) # [1, 2, 3] <class 'str'>

dic = json.loads(res)
print(dic , type(dic)) # [1, 3, 2] <class 'list'>

# json下面的dump和load
list1 = ["蓝天","白云","轻风"]
with open(r"C:UsersRachel LiuDesktop代码Day15名单1.txt",mode="w",encoding="utf-8") as f1:
    json.dump(list1,f1)  # ["u84ddu5929", "u767du4e91", "u8f7bu98ce"]
with open(r"C:UsersRachel LiuDesktop代码Day15名单1.txt",mode="r",encoding="utf-8") as f2:
    res = json.load(f2)
    print(res) # ['蓝天', '白云', '轻风']

5.2 json和pickle的区别:  json可以连续dump,但是不可以连续load,不过loads可以连续操作. pickle里面可以连续dump也可以连续load

                                      json序列化之后的类型是字符串,所有变成语言都是别,但是数据类型仅限于int, float,bool, list,tuple,dict,str,None.  pickle序列化之后的类型是bytes,所有数据类型都可以转化,但是仅限于python数据类型

# json可以连续dump,但是不可以连续load,loads可以连续操作
import json
list1 = [1,2,3]
list2 = [4,5,6]
with open(r"C:UsersRachel LiuDesktop代码Day15名单1.txt",mode="w",encoding="utf-8") as f1:
    json.dump(list1,f1)
    f1.write("
")
    json.dump(list2,f1)
# with open(r"C:UsersRachel LiuDesktop代码Day15名单1.txt",mode="r",encoding="utf-8") as f1:
#     res = json.load(f1)  # 报错

with open(r"C:UsersRachel LiuDesktop代码Day15名单1.txt",mode="r",encoding="utf-8") as f2:
    for i in f2:
        res =json.loads(i)
        print(res)
# [1, 2, 3]
# [4, 5, 6]

# pickle里面可以连续dump也可以连续load
import pickle
list1 = [1,2,3]
list2 = [4,5,6]
with open(r"C:UsersRachel LiuDesktop代码Day15名单1.txt",mode="wb") as f1:
    pickle.dump(list1,f1)
    pickle.dump(list2,f1)
# 方式一:
with open(r"C:UsersRachel LiuDesktop代码Day15名单1.txt",mode="rb") as f2:
    res = pickle.load(f2)
    print(res)
    res = pickle.load(f2)
    print(res)
# [1, 2, 3]
# [4, 5, 6]

# 方式二:
try:
    with open(r"C:UsersRachel LiuDesktop代码Day15名单1.txt",mode="rb") as f2:
        while True:
            res = pickle.load(f2)
            print(res)
except:
    pass
# [1, 2, 3]
# [4, 5, 6]

6. time模块:

import time
# 1. time(): 获取本地的时间戳
res = time.time()
print(res) # 1589952994.498272

# 2. localtime(): 获取本地的时间单元,时间单元里面的星期是从0到6的
ttp = time.localtime()
print(ttp) # time.struct_time(tm_year=2020, tm_mon=5, tm_mday=20, tm_hour=13, tm_min=37, tm_sec=40, tm_wday=2, tm_yday=141, tm_isdst=0)
ttp = time.localtime(13242356)  # 指定一个时间戳,可以返回对应的时间单元
print(ttp) # time.struct_time(tm_year=1970, tm_mon=6, tm_mday=3, tm_hour=14, tm_min=25, tm_sec=56, tm_wday=2, tm_yday=154, tm_isdst=0)

# 3. mktime(): 根据时间单元返回对应的时间戳
ttp = (1993,11,23,22,30,30,0,0,0)
res = time.mktime(ttp)
print(res) # 754065030.0

# 4. ctime(): 获取本地时间的字符串,默认返回当前时间的字符串,也可以指定时间戳,返回对应的字符串
res = time.ctime()
print(res) # Wed May 20 13:44:42 2020
res = time.ctime(754065030.0)
print(res) # Tue Nov 23 22:30:30 1993

# 5. asctime(): 通过时间单元获取对应的字符串,不能自动识别星期,除非时间单元里已表明星期(了解)
ttp = (2020,5,20,13,50,16,0,0,0)
res = time.asctime(ttp)
print(res) # Mon May 20 13:50:16 2020
ttp = (2020,5,20,13,50,16,2,0,0)
res = time.asctime(ttp)
print(res) # Wed May 20 13:50:16 2020

# 6. sleep(): 让程序睡眠几秒再开始执行
# time.sleep(2)
print("睡眠时间")

# 7. strftime(): 格式化时间字符串(格式化字符串,时间单元)
res = time.strftime("%Y_%m_%d %H:%M:%S")
print(res) # 2020_05_20 13:55:22
ttp = (1993,11,23,22,30,30,0,0,0)
res = time.strftime("%Y_%m_%d %H:%M:%S",ttp)
print(res) # 1993_11_23 22:30:30

# 8.strptime(): 将时间字符串通过指定的模式提取到时间单元中
str1 = "2020年5月20日5点20分转账520元"
res= time.strptime(str1,"%Y年%m月%d日%H点%M分转账520元")
print(res) # time.struct_time(tm_year=2020, tm_mon=5, tm_mday=20, tm_hour=5, tm_min=20, tm_sec=0, tm_wday=2, tm_yday=141, tm_isdst=-1)

# 9. perf_count(): 用于计算程序运行的时间(了解)
start_time = time.perf_counter()
for i in range(100000000):
    pass
end_time = time.perf_counter()
print(end_time-start_time) # 3.6004523

     用time模块做进度条:

import time
def jindu(percent):
    if percent > 1:
        percent = 1
    strvar = int(50*percent)*"#"
    print("
[%-50s]%d%%"%(strvar,int(100*percent)),end="")

recv_size = 0
total_size = int(input("请输入文件大小:"))
while recv_size < total_size:
    time.sleep(0.01)
    recv_size += 1024
    percent = recv_size/total_size
    jindu(percent)

 7. os模块:

7. 1  os系统操作部分:

import os
# 1. system(): 在python中执行操作命令
os.system("calc")  # 打开计算机
os.system("type nul>程序1") #  在相对路径下创建了一个程序1文件
os.system("ipconfig") # 因电脑系统使用GBK编码,故结果为乱码

# 2. popen(): 执行系统命令返回对象,通过read方法读出字符串
res = os.popen("ipconfig")
print(res) # <os._wrap_close object at 0x00000279F73CC278>
print(res.read()) # 经过read()将编码转为utf-8,可正常显示

# 3. listdir(): 获取指定文件夹的所有内容的名称列表
"""
.代表当前目录, ..代表上一级目录
"""
res = os.listdir(".")
print(res) # 返回当前目录的所有文件名称

res = os.listdir("..")
print(res) # 返回上一级目录的所有文件名称

res = os.listdir(r"C:UsersRachel LiuDesktop代码")
print(res) # 返回当前绝对路径里的所有文件名称

# 4. getcwd(): 获取当前文件所在的默认路径
res= os.getcwd()
print(res)

# 5. chdir(): 修改当前文件工作的默认路径
os.chdir("..")

# 6. enciron(): 获取或修改环境变量
res = os.environ
print(res)  # 获取系统里的环境变量,可将某个程序的路径添加到环境变量中,就可以通过命令打开这个程序

# os模块属性
# 1. name 获取系统标识,windows -> nt    linux,mac -> posix
print(os.name) # nt

# 2. sep 获取系统分割符号, windows->    linux,mac -> /
print(os.sep) # 

# 3. linesep 获取系统的换行符, windows -> 
  linux,mac->

print(repr(os.linesep)) # '
'

7.2  os文件操作部分:

import os
# 1. os.mknod(): 创建文件,linux系统可以,Windows系统有兼容问题,系统会报错,Windows系统可通过system方法来创建文件
os.mknod("文件1") # 报错

# 2. remove(): 删除文件
os.system("type nul>文件1")
os.remove("文件1")

# 3. mkdir(): 创建文件夹(目录)
os.mkdir("文件111")

# 4. rmdir(): 删除文件夹,文件夹必须为空,否则报错
os.rmdir("文件111")

# 5. rename(): 对文件,目录重命名
os.system("type nul>文件1")
os.rename("文件1","文件111")

# 6. makedirs(): 递归创建文件夹
os.makedirs("2020年/5月/20号")

# 7. removedirs(): 递归删除文件夹(须是空文件夹)
os.removedirs("2020年/5月/20号")

7.3  os.path路径模块:

import os
# 1. basename(): 返回文件名部分
pathvar = r"C:UsersRachel LiuPycharmProjects学习Python练习.py"
res = os.path.basename(pathvar)
print(res) # 练习.py

# 2. dirname(): 返回路径部分
res = os.path.dirname(pathvar)
print(res) # C:UsersRachel LiuPycharmProjects学习Python

# 3. split(): 将文件拆成文件部分和路径部分,组成一个元祖(了解)
res = os.path.split(pathvar)
print(res) # ('C:\Users\Rachel Liu\PycharmProjects\学习Python', '练习.py')

# 4. join(): 将多个路径和文件名组成一个新的路径,会自动根据不同的系统来添加不同的斜杠
path1 = "C:"
path2 = "Rachel Liu"
path3 = "学习Python"
res = os.path.join(path1,path2,path3)
print(res) # C:Rachel Liu学习Python

# 5. splitext(): 将路径分割为后缀和其他部分,组成元祖(了解)
res = os.path.splitext(pathvar)
print(res) # ('C:\Users\Rachel Liu\PycharmProjects\学习Python\练习', '.py')

# 6. getsize(): 获取文件大小,只能识别文件,返回字节数
res = os.path.getsize(r"C:UsersRachel LiuPycharmProjects学习Python白名单")
print(res) # 29

# 7. isfile(),isdir(),islink(): 判断是否是文件,是否是文件夹,是否是链接,返回bool值
res = os.path.isfile(r"C:UsersRachel LiuPycharmProjects学习Python白名单")
print(res) # True
res = os.path.isdir(r"C:UsersRachel LiuPycharmProjects学习Python白名单")
print(res) # False
res = os.path.islink(r"C:Program Files (x86)Notepad++")
print(res) # False

# 8. getctime(): windows下是获取文件的创建时间,Linux下是获取文件的修改时间,返回时间戳
import time
res = os.path.getctime(r"C:UsersRachel LiuPycharmProjects学习Python白名单")
print(res) # 1589371532.819015
ttp = time.ctime(res)
print(ttp) # Wed May 13 20:05:32 2020

# 9. getmtime(): 获取文件的最后修改时间,返回时间戳
res = os.path.getmtime(r"C:UsersRachel LiuPycharmProjects学习Python白名单")
print(res) # 1589683760.3121662

# 10. getatime(): 获取文件最后访问的时间,返回时间戳
res = os.path.getatime(r"C:UsersRachel LiuPycharmProjects学习Python白名单")
print(res) # 1589684039.3564212

# 11. exists(): 检测路径是否存在
print(os.path.exists(r"C:UsersRachel LiuPycharmProjects学习Python	1.txt"))
# True

# 12. isabs(): 检查路径是否是绝对路径
print(os.path.isabs(r"C:UsersRachel LiuPycharmProjects学习Python	1.txt"))
# True

# 13. abspath(): 将相对路径转为绝对路径
res = os.path.abspath("python代码练习")
print(res) # C:UsersRachel LiuDesktoppython代码练习python代码练习

8.  shutil模块:复制和粘贴

import shutil
# 1. copy(): 复制文件权限和内容
shutil.copy("文件1.txt","文件111")

# 2. copytree(): 拷贝文件夹里的所有内容(递归拷贝)
shutil.copytree("123","456")

# 3. rmtree(): 删除文件夹里所有内容(递归删除)
shutil.rmtree("123")

# 4.move(): 移动文件或者文件夹
shutil.move("456","..")

 9. zip模块: 用来做文件和目录的压缩和解压,Linux和Windows系统都适用

import zipfile
# (1) 压缩文件: zipfile.ZIP_DEFLATED表示压缩文件,tmp表示临时创建一个文件夹
# 创建压缩包:
zf = zipfile.ZipFile("测试压缩包.zip","w",zipfile.ZIP_DEFLATED)
# 将要压缩的文件加入到压缩包 zf.write("路径","别名")
zf.write(r"D:python学习测试文件333.txt")
zf.write(r"D:python学习测试文件2222020学习.txt","/tmp/学习")
# 关闭压缩文件
# zf.close()

# (2) 解压文件 extractall代表解压压缩包里所有文件,extract代表解压某一个文件
zf = zipfile.ZipFile("测试压缩包.zip","r")
#./代表相对当前路径
# zf.extractall("./测试解压文件夹") # 表示解压里面的所有文件到当前路径
zf.extract(r"333.txt","./测试单个文件解压") # 表示单独将333这个文件解压到测试单个文件解压这个文件里面
zf.close()

# (3) 追加文件: 将已经建好的压缩包打开,将要追加的文件写上,关闭压缩包
zf = zipfile.ZipFile("测试压缩包.zip","a",zipfile.ZIP_DEFLATED)
zf.write(r"D:python学习python代码练习测试解压文件夹666.txt","666.txt")
zf.close() 

#用with语法可以省略close操作
# (4) 查看文件  先打开压缩包,然后用namelist()方法读取文件名称,返回列表
with zipfile.ZipFile("测试压缩包.zip","r") as zf:
    lst = zf.namelist()
print(lst) # ['333.txt', 'tmp/学习', '666.txt']

10. tarfile模块:  主要也是用于文件的压缩和解压,解压后的文件比zip模块解压要小,主要针对Linux系统

          压缩后缀名一共有三种: .tar .tar.gz .tar.bz2 官方说法是.tar.bz2的压缩算法,包是最小的

import tarfile
# 创建tar打包
tf = tarfile.open("tar压缩测试.tar","w",encoding="utf-8")
# 添加要打包的文件
tf.add(r"D:python学习python代码练习111.txt","111.txt")
tf.add(r"D:python学习python代码练习333.txt","333.txt")
tf.add(r"D:python学习python代码练习测试解压文件夹666.txt","666.txt")
tf.close()  # 一共10240个字节

# 创建.tar.gz压缩包
tf = tarfile.open("tar压缩测试.tar.gz","w:gz",encoding="utf-8")
# 添加要压缩的文件
tf.add(r"D:python学习python代码练习111.txt","111.txt")
tf.add(r"D:python学习python代码练习333.txt","333.txt")
tf.add(r"D:python学习python代码练习测试解压文件夹666.txt","666.txt")
tf.close()  # 一共241个字节

# 创建.tar.bz2压缩包
tf = tarfile.open("tar压缩测试.tar.bz2","w:bz2",encoding="utf-8")
# 添加要压缩的文件
tf.add(r"D:python学习python代码练习111.txt","111.txt")
tf.add(r"D:python学习python代码练习333.txt","333.txt")
tf.add(r"D:python学习python代码练习测试解压文件夹666.txt","666.txt")
tf.close()  # 一共260个字节

# 解压文件  extarctall()代表解压所有的文件到某个路径下,extract()代表解压某个文件到某个路径下
tf = tarfile.open("tar压缩测试.tar.bz2","r",encoding="utf-8")
tf.extractall("./tar解压测试")
tf.extract("111.txt","tar解压单个文件测试")
tf.close()

# 追加模式: tarfile只能对w模式下的打包进行追加,其他模式不行
with tarfile.open("tar压缩测试.tar","a",encoding="utf-8") as tf:
    tf.add(r"D:python学习python代码练习5555.txt","5555.txt")
# 对于tar.gz  或者 tar.bz2已经压缩过的包无法追加文件

# 查看压缩包  首先先打开压缩包,然后用getnames()方法获取里面的文件,返回列表
with tarfile.open("tar压缩测试.tar","r",encoding="utf-8")as tf:
    lst = tf.getnames()
print(lst) # ['5555.txt']

# 在tarfile压缩包里面添加文件:
# 将原来的压缩包解压,把要追加的文件放进去,过滤数据后再重新压缩
with tarfile.open(pathvar1,"r",encoding="utf-8") as tf:
    tf.extractall(pathvar2)
import shutil
shutil.copy(r"E:python30day17ceshi1004.php",pathvar2)
"""过滤掉222这个文件,剩下的文件重新打包"""
lst = os.listdir(pathvar2)
print(lst) # ['1.txt', '222', '4.php', 'tmp']
with tarfile.open(pathvar1,"w:bz2",encoding="utf-8") as tf:
    for i in lst:
        pathnew = os.path.join(pathvar2,i)
        if i != "222":
            tf.add(pathnew,i)
原文地址:https://www.cnblogs.com/fdsimin/p/12912582.html