Day16 os模块、time模块、random模、math模块

1.os模块-对系统就行操作

#system() 在python中执行系统命令
#popen() 执行系统命令返回对象,通过read方法读出字符串
#listdir() 获取指定文件夹中所有内容的名称列表
#getcwd() 获取当前文件所在的默认路径
#chdir() 修改当前文件工作的默认路径
#environ 获取或修改环境变量
#--os 模块属性
#name 获取系统标识 linux,mac ->posix windows -> nt
#sep 获取路径分割符号 linux,mac -> / window-> \
#linesep 获取系统的换行符号 linux,mac -> \n window->\r\n 或 \n

# ### 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', 'XAUTHORITY': '/home/wangwen/.Xauthority', 'XMODIFIERS': '@im=fcitx', 'XDG_DATA_DIRS': '/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/
:/var/lib/snapd/desktop', 


'GDMSESSION': 'ubuntu', 
'MANDATORY_PATH': '/usr/share/gconf/ubuntu.mandatory.path', 'GTK_IM_MODULE': 'fcitx', 'DBUS_SESSION_BUS_ADDRESS': 'unix:abstract=/tmp/dbus-oBOuAq0vFV', 'DEFAULTS_PATH': '/usr/share/gconf/ubuntu.default.path', 'PS1': '(venv) ', 'XDG_CURRENT_DESKTOP': 'Unity', 'UPSTART_SESSION': 'unix:abstract=/com/ubuntu/upstart-session/1000/1761', 'QT4_IM_MODULE': 'fcitx', 'QT_LINUX_ACCESSIBILITY_ALWAYS_ON': '1', 'LOGNAME': 'wangwen', 'JOB': 'unity-settings-daemon', 'PWD': '/mnt/hgfs/gongxiang_16/day16', 'IM_CONFIG_PHASE': '1', 'PYCHARM_HOSTED': '1', 'LANGUAGE': 'zh_CN:zh', 'PYTHONPATH': '/home/wangwen/PycharmProjects/untitled:/home/wangwen/mysoft/pycharm-2019.1.2/helpers/pycharm_matplotlib_backend:/home/wangwen/mysoft/pycharm-2019.1.2/helpers/pycharm_display', 'SHELL': '/bin/bash', 'GIO_LAUNCHED_DESKTOP_FILE': '/home/wangwen/.local/share/applications/jetbrains-pycharm.desktop', 'INSTANCE': '', 'GTK2_MODULES': 'overlay-scrollbar', 'UPSTART_INSTANCE': '', 'GNOME_DESKTOP_SESSION_ID': 'this-is-deprecated', 'GTK_MODULES': 'gail:atk-bridge:unity-gtk-module', 'VIRTUAL_ENV': '/home/wangwen/PycharmProjects/untitled/venv', 'CLUTTER_IM_MODULE': 'xim', 'XDG_SESSION_PATH': '/org/freedesktop/DisplayManager/Session0', 'COMPIZ_BIN_PATH': '/usr/bin/', 'SESSIONTYPE': 'gnome-session', 'XDG_SESSION_DESKTOP': 'ubuntu', 'SHLVL': '0', 'COMPIZ_CONFIG_PROFILE': 'ubuntu', 'UPSTART_JOB': 'unity7', 'QT_IM_MODULE': 'fcitx', 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg', 'GNOME_KEYRING_CONTROL': '', 'LANG': 'zh_CN.UTF-8', 'XDG_SEAT_PATH': '/org/freedesktop/DisplayManager/Seat0', 'XDG_SESSION_TYPE': 'x11', 'XDG_SESSION_ID': 'c2', 'DISPLAY': ':0', 'PYCHARM_DISPLAY_PORT': '45245', 'GDM_LANG': 'zh_CN', 'PYTHONIOENCODING': 'UTF-8', 'XDG_GREETER_DATA_DIR': '/var/lib/lightdm-data/wangwen', 'UPSTART_EVENTS': 'xsession started', 'SESSION': 'ubuntu', 'GPG_AGENT_INFO': '/home/wangwen/.gnupg/S.gpg-agent:0:1', 'DESKTOP_SESSION': 'ubuntu', 'USER': 'wangwen', 'GIO_LAUNCHED_DESKTOP_FILE_PID': '2358', 'QT_ACCESSIBILITY': '1', 'SSH_AUTH_SOCK': '/run/user/1000/keyring/ssh', 'XDG_SEAT': 'seat0', 'PYTHONUNBUFFERED': '1', 'QT_QPA_PLATFORMTHEME': 'appmenu-qt5', 'XDG_RUNTIME_DIR': '/run/user/1000', 'XDG_VTNR': '7', 
'HOME': '/home/wangwen', 'GNOME_KEYRING_PID': ''})

'''
# ###--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))

2.time模块

#time() 获取本地时间戳
#mktime() 通过[时间元组]获取[时间戳] (参数是时间元组)
#localtime() 通过[时间戳]获取[时间元组] (默认当前时间)
#ctime() 通过[时间戳]获取[时间字符串] (默认当前时间)
#asctime() 通过[时间元组]获取[时间字符串](参数是时间元组)
#strftime() 通过[时间元组]格式化[时间字符串] (格式化字符串,[可选时间元组参数])
#strptime() 通过[时间字符串]提取出[时间元组] (时间字符串,格式化字符串)
#sleep() 程序睡眠等待
#perf_counter() 用于计算程序运行的时间

# ### time 时间模块
import time
#time()      获取本地时间戳
res = time.time()
print(res)
# 1559973224.3211205

#mktime()        通过[时间元组]获取[时间戳] (参数是时间元组)
ttp = (2019,5,16,10,55,30,0,0,0)
res = time.mktime(ttp)
print(res)
# 1557975330.0
#localtime()     通过[时间戳]获取[时间元组] (默认当前时间)
res = time.localtime()
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)
# Sat Jun  8 13:53:44 2019

res = time.ctime(1557975330)
print(res)
# Thu May 16 10:55:30 2019

#asctime()       通过[时间元组]获取[时间字符串](参数是时间元组)
ttp = (2019,5,1,3,3,3,2,0,0)
res = time.asctime(ttp)
print(res)
# Wed May  1 03:03:03 2019
# asctime 内部实现有个小bug,不能够自动识别是周几,只能手动填写
# 优化写法
ttp = (2019,5,1,3,3,3,0,0,0)
res = time.mktime(ttp)
print(res)
# 1556650983.0
res = time.ctime(res)
print(res)
# Wed May  1 03:03:03 2019


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

res = time.strftime("%Y=%m=%d %H|%M|%S")
print(res)
# 2019=06=08 13|53|44
ttp = (2019,5,1,3,3,3,0,0,0)
res = time.strftime("%Y=%m=%d %H|%M|%S",ttp)
print(res)
# 2019=05=01 03|03|03


#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)
# 90.6656399714512

3.random模

#random() 获取随机0-1之间的小数(左闭右开)
#randrange() 随机获取指定范围内的整数(包含开始值,不包含结束值,间隔值)
#randint() 随机产生指定范围内的随机整数
#uniform() 获取指定范围内的随机小数(左闭右开)
#choice() 随机获取序列中的值(多选一)
#sample() 随机获取序列中的值(多选多) [返回列表]
#shuffle() 随机打乱序列中的值(直接打乱原序列)

# ### random 随机模块
import random
#random() 获取随机0-1之间的小数(左闭右开)
res = random.random()  # 0<= x < 1
print(res)
# 0.2317205285049735

#randrange() 随机获取指定范围内的整数(包含开始值,不包含结束值,间隔值)
res = random.randrange(2)  # 0,1
print(res)
# 1
res = random.randrange(1,6) # 1,2,3,4,5
print(res)
# 4
res = random.randrange(1,7,3) # 1 4
print(res)
# 1

#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)
# 2.0505468622018808
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)

# dbO4

4.math模块

#ceil() 向上取整操作 (对比内置round)
#floor() 向下取整操作 (对比内置round)
#pow() 计算一个数值的N次方(结果为浮点数) (对比内置pow)
#sqrt() 开平方运算(结果浮点数)
#fabs() 计算一个数值的绝对值 (结果浮点数) (对比内置abs)
#modf() 将一个数值拆分为整数和小数两部分组成元组
#copysign() 将参数第二个数值的正负号拷贝给第一个
#fsum() 将一个容器数据中的数据进行求和运算 (结果浮点数)(对比内置sum)
#圆周率常数 pi

# ### math 数学模块
import math
#ceil()  向上取整操作 (对比内置round)
res = math.ceil(6.0001) # 注意精度损耗
print(res)
# 7

#floor() 向下取整操作 (对比内置round)
res = math.floor(3.5)
print(res)
res = math.floor(3.9999999)
print(res)
# 3
# 3
#pow()  计算一个数值的N次方(结果为浮点数) (对比内置pow)
res = math.pow(2,3)
# res = math.pow(2,3,3) # math 模块中的pow 只有2个参数
print(res)
# 8.0
# print(pow(2,3))
# print(pow(2,3,5))
#sqrt() 开平方运算(结果浮点数)
res = math.sqrt(9)
print(res)
# 3.0

#fabs() 计算一个数值的绝对值 (结果浮点数) (对比内置abs)
res = math.fabs(-1)
print(res)
# 1.0
#modf() 将一个数值拆分为整数和小数两部分组成元组
res = math.modf(14.9)
print(res)
# (0.9000000000000004, 14.0)
#copysign()  将参数第二个数值的正负号拷贝给第一个
res = math.copysign(-13,67)
print(res)
# 13.0
#fsum() 将一个容器数据中的数据进行求和运算 (结果浮点数)(对比内置sum)
listvar = [234,242,4,2,42,42,4]
res = math.fsum(listvar)
print(res)
# 570.0
#圆周率常数 pi
res = math.pi
print(res)
# 3.141592653589793

 5.os.path

# ### 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)

#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]权限的改动时间(返回时间戳)  ***
'''
# 验证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)

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

#getmtime() 获取文件最后一次修改时间(返回时间戳)  ***
res = os.path.getmtime(pathvar)
print(res)

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

#getatime() 获取文件最后一次访问时间(返回时间戳)  ***
res = os.path.getatime(pathvar)
print(res)
import time 
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
'''
pathvar = "/mnt/hgfs/gongxiang_16/day17/ceshi100"
lst = os.listdir(pathvar)
print(lst)


# 遍历所有的文件和文件夹,计算文件的大小
size = 0
for i in lst:
    # print(i)
    path_new = os.path.join(pathvar,i)
    # print(path_new)
    if os.path.isdir(path_new):
        print(i,"是一个[目录]")
    elif os.path.isfile(path_new):
        print(i,"是一个[文件]")
        size += os.path.getsize(path_new)
print(size) # 2132 + 97 = 2229
'''

# 使用递归来完成文件夹大小的计算
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)

# x   2229 + 1272 + 1283  =   4784
 
  
 
 

猜你喜欢

转载自www.cnblogs.com/longerandergou/p/10990611.html