Python笔记_16_math模块_random模块_time模块_os.path模块

math 数学模块

import math
ceil()

向上取整操作 (对比内置round)

res = math.ceil(6.0001) # 注意精度损耗
print(res)
floor()

向下取整操作 (对比内置round)

res = math.floor(3.5)
res = math.floor(3.9999999)
print(res)
pow()

计算一个数值的N次方(结果为浮点数) (对比内置pow)

res = math.pow(2,3)
# res = math.pow(2,3,3) # math 模块中的pow 只有2个参数
print(res)
# print(pow(2,3))
# print(pow(2,3,5))
sqrt()

开平方运算(结果浮点数)

res = math.sqrt(9)
print(res)
fabs()

计算一个数值的绝对值 (结果浮点数) (对比内置abs)

res = math.fabs(-1)
print(res)
modf()

将一个数值拆分为整数和小数两部分组成元组

res = math.modf(14.9)
print(res)
copysign()

将参数第二个数值的正负号拷贝给第一个

res = math.copysign(-13,67)
print(res)
fsum()

将一个容器数据中的数据进行求和运算 (结果浮点数)(对比内置sum)

listvar = [234,242,4,2,42,42,4]
res = math.fsum(listvar)
print(res)
pi

圆周率常数

res = math.pi
print(res)

random 随机模块

random()

获取随机0-1之间的小数(左闭右开)

res = random.random()  # 0<= x < 1
print(res)
randrange()

随机获取指定范围内的整数(包含开始值,不包含结束值,间隔值)

res = random.randrange(2)  # 0,1
print(res)

res = random.randrange(1, 6)  # 1,2,3,4,5
print(res)

res = random.randrange(1, 7, 3)  # 1 4
print(res)
randint()

随机产生指定范围内的随机整数
randint 目前是唯一一个高位值可以去得到的函数 (不推荐使用)

res = random.randint(1, 2)
print(res)
# res = random.randint(2,6,2) # 没有间隔值参数 功能不如randrange
# print(res)
uniform()

获取指定范围内的随机小数(左闭右开)

res = random.uniform(2, 4)  # 2<=x < 4
print(res)
res = random.uniform(4, -2)
print(res)

'''
a = 4 , b = -2
return a + (b-a) * self.random()

4+(-2-4) * (0~1)
4+-6*(0~1) =>  当取0时  4
4+-6*(0~1) =>  当取1时  -2 (1是取不到的)
所以:
-2 < x <=4
'''
choice()

随机获取序列中的值(多选一)

listvar = ["周杰伦", "王文", "周润发", "周星驰"]
res = random.choice(listvar)
print(res)


# 自定义choice
def mychoice():
    num = random.randrange(0, len(listvar))
    res = listvar[num]
    return res

print(mychoice())
sample()

随机获取序列中的值(多选多) [返回列表]

listvar = ["周杰伦", "王文", "周润发", "周星驰"]
res = random.sample(listvar, 2)
print(res)
shuffle()

随机打乱序列中的值(直接打乱原序列)

listvar = ["周杰伦", "王文", "周润发", "周星驰"]
random.shuffle(listvar)
print(listvar)
随机4位验证码
def yanzhengma():
    strvar = ""
    for i in range(4):
        # 产生大写字母A~Z
        bchr = chr(random.randrange(65, 91))
        # 产生小写字母a~z
        schr = chr(random.randrange(97, 123))
        # 数字0~9
        num = str(random.randrange(0, 10))
        # 把所有随机值得种类塞到列表里
        listvar = [bchr, schr, num]
        # 随机选取一个
        res = random.choice(listvar)
        # 拼接字符串
        strvar += res
    # 返回字符串
    return strvar


res = yanzhengma()
print(res)

time 时间模块

时间戳指从1970年1月1日0时0分0秒到指定时间之间的秒数,时间戳是秒,32位系统可以使用到2038年的某一天
UTC时间: 世界约定的时间表示方式,世界统一时间格式,世界协调时间!
夏令时: 在夏令时时间状态下,时间会调快1个小时

#时间元组是使用元祖格式表示时间的一种方式
    格式1(自定义):
        (年,月,日,时,分,秒,周几,一年中的第几天,是否是夏令时时间)
    格式2(系统提供):
        (tm_year = 年,tm_month = 月,tm_day = 日,tm _hour = 时, tm_min = 分, tm _sec = 秒, tm _wday = 周几, tm _yday = 一年中的第几天,tm_isdst = 是否是夏令时时间)

        0   年   4位数完整年份    四位数1997
        1   月   1-12月           1 - 12
        2   日   1-31天           1 - 31
        3   时   0-23时           0 - 23
        4   分   0-59分           0 - 59
        5   秒   0-61秒           0 - 61
        6   周几 周一-周天         0 - 6
        7   年中第几天    共366天  1 - 366
        8   夏令时  两种           0,1  0是  其他都不是  
import time
time()

获取本地时间戳

res = time.time()
print(res)
mktime()

通过 [时间元组] 获取 [时间戳] (参数是时间元组)

ttp = (2019, 5, 16, 10, 55, 30, 0, 0, 0)
res = time.mktime(ttp)
print(res)
localtime()

通过 [时间戳] 获取 [时间元组] (默认当前时间)

res = time.localtime()
print(res)

res = time.localtime(1557975330)
print(res)

'''
time.struct_time
(
tm_year=2019,
tm_mon=5,
tm_mday=16,
tm_hour=10,
tm_min=57,
tm_sec=10,
tm_wday=3,
tm_yday=136,
tm_isdst=0
)
'''

ctime()

通过 [时间戳] 获取 [时间字符串] (默认当前时间)

res = time.ctime()
print(res)

res = time.ctime(1557975330)
print(res)

asctime()

通过 [时间元组] 获取 [时间字符串] (参数是时间元组)

ttp = (2019, 5, 1, 3, 3, 3, 2, 0, 0)
res = time.asctime(ttp)
print(res)

# asctime 内部实现有个小bug,不能够自动识别是周几,只能手动填写
# 优化写法
ttp = (2019, 5, 1, 3, 3, 3, 0, 0, 0)
res = time.mktime(ttp)
print(res)
res = time.ctime(res)
print(res)
strftime()

通过 [时间元组] 格式化 [时间字符串] (格式化字符串 , [可选时间元组参数])

res = time.strftime("%Y=%m=%d %H|%M|%S")
print(res)
ttp = (2019, 5, 1, 3, 3, 3, 0, 0, 0)
res = time.strftime("%Y=%m=%d %H|%M|%S", ttp)
print(res)

# 注意点 windows 不支持strftime的中文字符 linux 完全可以
res = time.strftime("%Y-%m-%d %H:%M:%S 今天是段奕宏的生日")
# print(res)
strptime()

通过[时间字符串]提取出[时间元组] (时间字符串,格式化字符串)
注意点:strptime 在匹配字符串当中的时间时,字符串必须严丝合缝,不能随意修改原有字符.

res = time.strptime(
    "2019年5月17号,5期同学会看着4期同学在早上8点9分20秒的时候去下野",
    "%Y年%m月%d号,5期同学会看着4期同学在早上%H点%M分%S秒的时候去下野")
print(res)
'''
time.struct_time(
tm_year=2019,
tm_mon=5,
tm_mday=17,
tm_hour=8,
tm_min=9,
tm_sec=20,
tm_wday=4,
tm_yday=137,
tm_isdst=-1)
'''
sleep()

程序睡眠等待

time.sleep(10)  # 程序在此加阻塞,10秒之后载向下执行
print("我睡醒了")
perf_counter()

用于计算程序运行的时间

# 用time.time() 一样可以实现
startime = time.perf_counter()
print(startime)
for i in range(1000000000):
    pass
endtime = time.perf_counter()
res = endtime - startime
print(res)

os 对系统进行操作

import os
system()

在python中执行系统命令

os.system("touch ceshi1.txt") #linux
os.system("ifconfig")
os.system("mspaint") # windows
os.system("ipconfig")
popen()

执行系统命令返回对象,通过read方法读出字符串

# 使用popen 来解决windows 乱码的bug

obj = os.popen("ipconfig")
print(obj)
res = obj.read()
print(res)

listdir()

获取指定文件夹中所有内容的名称列表

# 相对路径
res = os.listdir(".")
print(res)
res = os.listdir("./ceshi100")
print(res)
# 绝对路径 (以 / 开头)
res = os.listdir("/mnt/hgfs/gongxiang_16/day16")
print(res)
getcwd()

获取当前文件所在的默认路径

res = os.getcwd()
print(res)
# __file__ 魔术属性 : 获取当前文件的完整路径
print(__file__)

chdir()

修改当前文件工作的默认路径

os.system("rm -rf ceshi1.txt")
os.chdir("/home/wangwen/mywork")
os.system("rm -rf 2.txt")
os.system("mkdir ceshi222")
environ

获取或修改环境变量
(返回的是一个系统的字典 [是所有环境变量的字典] 其中PATH这个键所有对应的值,是系统命令路径)
如果想要系统执行你的命令,需要先从PATH环境变量当中进行查找,如果找到了直接执行,找不到not found


os.system("wangwen")

'''
(1) 创建一个文件夹 在家目录里,比如mywork
(2) 创建一个文件,叫wangwen,里面用nano 编辑 写ifconfig
(3) 修改wangwen文件的权限 chmod 777 wangwen
(4) sudo ./wangwen  执行当前脚本
(5) pycharm => os.system("wangwen") => 报错 . 找不到 ,因为系统环境变量PATH当中,没有该路径
(6) 利用os.environ 拼接一个新的路径到PATH环境变量当中,让系统帮助我们找到对应的路径,从而执行该命令
(7) os.environ['PATH'] += ":/home/wangwen/mywork" 把路径用拼接的形式加到环境变量里
(8) os.system("wangwen") => 成功~
'''


res = os.environ
print(res)

# 获取PATH 这个环境变量所有的路径
os.environ['PATH'] += ":/home/wangwen/mywork"
os.system("wangwen")


'''
environ(
{'PATH': '/home/wangwen/PycharmProjects/untitled/venv/bin
:/home/wangwen/bin
:/home/wangwen/.local/bin:/usr/local/sbin
:/usr/local/bin
:/usr/sbin
:/usr/bin
:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin', ...

'''

os 模块属性

name

获取系统标识 linux,mac(UNIX) ->posix windows -> nt

res = os.name
print(res)
sep

获取路径分割符号 linux,mac -> / window-> \

# 如果不确定系统是什么,用os.sep 来拼接路径
res = os.sep
print(res)  # /home/wangwen/...   windows C:\Drivers
linesep

获取系统的换行符号 linux,mac -> \n window->\r\n 或 \n

res = os.linesep
print(repr(res))

os.path

import os
abspath()

将相对路径转化为绝对路径

res = os.path.abspath(".")
print(res)
basename()

返回文件名部分

pathvar = "/mnt/hgfs/gongxiang_16/day16/2.py"
res = os.path.basename(pathvar)
print(res)
dirname()

返回路径部分

pathvar = "/mnt/hgfs/gongxiang_16/day16/2.py"
res = os.path.dirname(pathvar)
print(res)  # /mnt/hgfs/gongxiang_16/day16
split()

将路径拆分成单独的文件部分和路径部分 组合成一个元组

res = os.path.split(pathvar)
print(res)
join()

将多个路径和文件组成新的路径 可以自动通过不同的系统加不同的斜杠 linux / windows\

path1 = "home"
path2 = "wangwen"
path3 = "mywork"
res = os.path.join(path1, path2, path3)
print(res)
# path1 + os.sep + path2 + os.sep + .......
splitext()

将路径分割为后缀和其他部分

pathvar = "/mnt/hgfs/gongxiang_16/day16/2.py"
res = os.path.splitext(pathvar)
print(res)
getsize()

获取文件的大小

pathvar = "/mnt/hgfs/gongxiang_16/day16/2.py"
res = os.path.getsize(pathvar)
print(res,type(res))
isdir()

检测路径是否是一个文件夹

pathvar = "/mnt/hgfs/gongxiang_16/day16"
res = os.path.isdir(pathvar)
print(res)
isfile()

检测路径是否是一个文件

pathvar = "/mnt/hgfs/gongxiang_16/day16/2.py"
res = os.path.isfile(pathvar)
print(res)
islink()

检测路径数否是一个链接

pathvar = "/home/wangwen/ceshi1002/ceshi1001"
res = os.path.islink(pathvar)
print(res)
getctime()

[windows] 文件的创建时间,[linux] 权限的改动时间(返回时间戳)

import time
'''
# 验证linux 没有创建时间 只有权限改动时间 linux查看文件的状态:命令是 stat 1.txt (文件名)
# os.chdir("/home/wangwen/mywork")
# res = os.getcwd()
# print(res)
'''
pathvar = "/mnt/hgfs/gongxiang_16/day16/123ceshi.txt"
res = os.path.getctime(pathvar)
print(res)

res = time.ctime(res)
print(res)
getmtime()

获取文件最后一次修改时间(返回时间戳)

res = os.path.getmtime(pathvar)
print(res)

res = time.ctime(res)
print(res)
getatime()

获取文件最后一次访问时间(返回时间戳)

res = os.path.getatime(pathvar)
print(res)
res = time.ctime(res)
print(res)
exists()

检测指定的路径是否存在

pathvar = "/mnt/hgfs/gongxiang_16/day16/123ceshi222.txt"
res = os.path.exists(pathvar)
print(res)
isabs()

检测一个路径是否是绝对路径

pathvar = "."
res = os.path.isabs(pathvar)
print(res)

计算任意文件夹的大小

import os

def file_size(file_path):
	# 排除链接的影响
    if os.path.islink(file_path): 
        return 0
    size = 0
    if os.path.isfile(file_path):
        return os.path.getsize(file_path)
    else:
        file_list = os.listdir(file_path)
        for i in file_list:
            new_path = os.path.join(file_path, i)
            size += file_size(new_path)
    return size

strvar = '/Volumes/硬盘/mac/Downloads'.strip('\u200e')
res = file_size(strvar)
print(res)

import os
# 使用递归来完成文件夹大小的计算
pathvar = "/mnt/hgfs/gongxiang_16/day17/ceshi100"
def getallsize(pathvar):
	size = 0
	lst  =os.listdir(pathvar)
	print(lst)
	for i in lst:
		print(i)
		# 拼接路径 + 文件名 => 新路径
		path_new = os.path.join(pathvar,i)
		if os.path.isdir(path_new):
			size += getallsize(path_new)
			'''
			size = size + getallsize(path_new)
			size = 2229 + getallsize(path_new)
			'''
		elif os.path.isfile(path_new):
			size += os.path.getsize(path_new)
	
	return size
res = getallsize(pathvar)
print(res)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值