No15.其他常用模块

本文深入介绍了Python标准库中的关键模块,包括collections模块的各种高效数据结构,如namedtuple、deque和OrderedDict等;random模块生成随机数的方法;time模块处理时间戳、格式化时间的功能;sys模块获取系统信息及参数;os模块实现文件和目录操作。

1、collections模块

  • nametuple用法
from collections import namedtuple
# numetuple(名称,属性list)
Point = namedtuple('point', ['x', 'y']) # 第一个参数为名称,第二个参数是一个属性列表
p = Point(1, 2)
print(p.x)
print(p.y)
print(p)
>>>
1
2
point(x=1, y=2)
  • deque双端队列
from collections import deque
dq = deque([1, 2])
dq.append('a') # 从后面放数据 [1, 2, 'a']
dq.appendleft('b') # 从前面放数据 ['b', 1, 2, 'a']
dq.insert(2, 3) #['b', 1, 3, 2, 'a']
print(dq.pop()) # 从后面取数据
print(dq.popleft()) # 从前面取数据
>>>
a
b
  • OrderedDict有序字典
# 有序字典的操作和字典一样
from collections import OrderedDict
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od)
>>>
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
  • defaultdict
# 我们在使用dict的时候,如果引用一个不存在的key,会抛出一个KeyError,如果希望key不存在
时,返回一个默认值,就可以使用defauldict
from collections import defaultdict #导入

values = [11, 22, 33, 44, 55]
my_dic = defaultdict(list) #参数必须时可调用的数据类型
for value in values:
    if value > 33:
        my_dic['k1'].append(value)
    else:
        my_dic['k2'].append(value)

d = defaultdict(lambda : 5) #指定默认值为5
print(d['k'])
>>>
5

2、random随机数模块

import random

# 随机小数
print(random.random()) # 返回一个大于0小于1的小数
print(random.uniform(1, 2)) # 返回一个大于1小于2的小数
>>>
0.8247888611442638
1.4266550519345393

# 随机整数
print(random.randint(1, 5)) # 返回一个大于等于1小于等于5的整数
print(random.randrange(1, 10, 2)) # 大于等于1且小于等于10的奇数
>>>
1
3

# 随机选择一个返回
print(random.choice([1, '23', 'df']))
>>>
1

# 随机选择多个返回,返回的个数为函数的第二个参数
print(random.sample([1, 2, 3, 4, 5, 6, 7, 8], 2))
>>>
[1, 8]

# 打乱列表顺序
item = [1, 2, 3, 4, 5]
random.shuffle(item)
print(item)
>>>
[4, 3, 5, 1, 2]

3、time时间模块

时间的三种表示方法:

  • 时间戳:表示一个从1970年1月1日00:00:00开始计算按秒计算的偏移量
  • 格式化的时间字符串
  • 结构化时间:元组:含有九个元素(年,月,日,时,分,秒,周几,一年中的第几天,是否是夏令时)
import time


time.sleep(1) # 睡几秒
print(time.time()) # 返回一个时间戳
print(time.strftime("%Y-%m-%d %H:%M:%S")) #year month day hour minute second 每个字母代表意义是固定的
print(time.strftime("%Y-%m-%d"))
>>>
1532046121.2358892
2018-07-20 08:22:01
2018-07-20

struct_time = time.localtime() #结构化时间
print(struct_time)
print(struct_time.tm_year) # 可以中名字进行取值
>>>
time.struct_time(tm_year=2018, tm_mon=7, tm_mday=20, tm_hour=8, tm_min=22, tm_sec=37, tm_wday=4, tm_yday=201, tm_isdst=0)
2018

# 时间戳和结构化时间
t = time.time()
print(t)
print(time.localtime(1600000000))
print(time.gmtime(t))
>>>
1532046211.0795898
time.struct_time(tm_year=2020, tm_mon=9, tm_mday=13, tm_hour=20, tm_min=26, tm_sec=40, tm_wday=6, tm_yday=257, tm_isdst=0)
time.struct_time(tm_year=2018, tm_mon=7, tm_mday=20, tm_hour=0, tm_min=23, tm_sec=31, tm_wday=4, tm_yday=201, tm_isdst=0)


# 结构化时间转化为时间戳
print(time.mktime(time.localtime()))
>>>
1532046254.0

# 格式化时间转化为结构化时间
print(time.strptime('2000-12.31', "%Y-%m.%d"))
>>>
time.struct_time(tm_year=2000, tm_mon=12, tm_mday=31, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=366, tm_isdst=-1)


print(time.strftime("%m/%d/%Y %H:%M:%S", time.localtime(30000000000)))
>>>
08/30/2920 13:20:00


print(time.asctime(time.localtime()))
>>>
Fri Jul 20 08:26:31 2018

4、sys模块

import sys

print(sys.platform) # 返回操作系统平台名称
print(sys.version)  #判断当前解释器版本
>>>
win32
3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]

# sys.exit(n) 退出程序 正常退出是exit(0), 错误退出时exit(1)

print(sys.path) #返回了模块的搜索路径
>>>
['D:\\MyPythonSource\\常用模块\\sys模块', 'D:\\MyPythonSource', 'D:\\MyPythonSource\\venv\\Scripts\\python36.zip', 'F:\\python36\\DLLs', 'F:\\python36\\lib', 'F:\\python36', 'D:\\MyPythonSource\\venv', 'D:\\MyPythonSource\\venv\\lib\\site-packages', 'D:\\MyPythonSource\\venv\\lib\\site-packages\\setuptools-28.8.0-py3.6.egg', 'D:\\MyPythonSource\\venv\\lib\\site-packages\\pip-9.0.1-py3.6.egg', 'F:\\pycharm\\PyCharm 2018.1.2\\helpers\\pycharm_matplotlib_backend']

# sys.argv 在终端起作用,执行脚本时,在脚本后面传的参数会被sys.argv接收到然后sys.argv会返回一个带有参数的列表

5、os模块

import os


#获取当前脚本所在的目录
print(os.getcwd())
>>>
D:\MyPythonSource\常用模块\os模块



#改变当前脚本所在的目录
os.chdir(r'D:\MyPythonSource\常用模块')
print(os.getcwd())
>>>
D:\MyPythonSource\常用模块


print(os.curdir) #当前目录
print(os.pardir) #上一级目录
>>>
.
..


#创建目录,可生成多级目录
os.makedirs('dirname1/dirname2')


#若目录为空,则删除,并递归到上一级目录,如若也空,则删除,依次类推
os.removedirs('dirname1/dirname2')


#只能生成单级目录
os.mkdir('dirname')


#删除单级目录
os.remove('dirname')


# 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表的方式打印
print(os.listdir(r'D:/MyPythonSource/常用模块'))
>>>
['collections', 'os模块', 'Ramdan模块', 're模块', 'sys模块', 'time模块', '模块总览']


# 重命名文件或目录
os.rename()


# 显示文件信息
print(os.stat('dirname'))
>>>
os.stat_result(st_mode=16895, st_ino=4503599627376808, st_dev=2967098512, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1532044381, st_mtime=1532004110, st_ctime=1532004110)


# 输出操作系统特定的路径分隔符,一般用于跨平台
print(os.sep)
>>>
\

#输出当前平台所使用的终止符,win下位\t\n,linux为\n
print(os.linesep)


# 输出用于分割文件路径的字符串,在环境变量中可以看见
print(os.pathsep)
>>>
;


# 输出字符串指示当前使用平台。win -> 'nt', linux -> 'posix'
print(os.name)
>>>
nt


# 执行系统命令,没有返回值
os.system('dir')


# 执行系统命令,有返回值
ret = os.popen('dir').read()
print(ret)
>>>
 驱动器 D 中的卷是 study
 卷的序列号是 B0DA-5490

 D:\MyPythonSource\常用模块\os模块 的目录

2018/07/20  08:43    <DIR>          .
2018/07/20  08:43    <DIR>          ..
2018/07/19  20:41    <DIR>          dirname
2018/07/20  08:43             2,457 os模块.py
               1 个文件          2,457 字节
               3 个目录 72,514,375,680 可用字节



# 获取系统的环境变量
print(os.environ)
>>>
environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\Trony\\AppData\\Roaming', 'CLASS_PATH': ' .;F:\\jdk\\lib;F:\\jdk\\lib\\tools.jar', 'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files', 'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files', 'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files', 'COMPUTERNAME': 'DESKTOP-BVPBT0E', 'COMSPEC': 'C:\\WINDOWS\\system32\\cmd.exe', 'DRIVERDATA': 'C:\\Windows\\System32\\Drivers\\DriverData', 'HOMEDRIVE': 'C:', 'HOMEPATH': '\\Users\\Trony', 'JAVA_HOME': 'F:\\jdk', 'LOCALAPPDATA': 'C:\\Users\\Trony\\AppData\\Local', 'LOGONSERVER': '\\\\DESKTOP-BVPBT0E', 'NUMBER_OF_PROCESSORS': '8', 'ONEDRIVE': 'C:\\Users\\Trony\\OneDrive', 'OS': 'Windows_NT', 'PATH': 'C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;F:\\jdk\\bin;F:\\jdk\\jre\\bin;C:\\WINDOWS\\System32\\OpenSSH\\;F:\\git\\Git\\cmd;F:\\python36\\Scripts\\;F:\\python36\\;C:\\Users\\Trony\\AppData\\Local\\Microsoft\\WindowsApps;;D:\\MyPythonSource\\venv\\Scripts', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC', 'PROCESSOR_ARCHITECTURE': 'AMD64', 'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 94 Stepping 3, GenuineIntel', 'PROCESSOR_LEVEL': '6', 'PROCESSOR_REVISION': '5e03', 'PROGRAMDATA': 'C:\\ProgramData', 'PROGRAMFILES': 'C:\\Program Files', 'PROGRAMFILES(X86)': 'C:\\Program Files (x86)', 'PROGRAMW6432': 'C:\\Program Files', 'PROMPT': '(venv) $P$G', 'PSMODULEPATH': 'C:\\Program Files\\WindowsPowerShell\\Modules;C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules', 'PUBLIC': 'C:\\Users\\Public', 'PYCHARM_HOSTED': '1', 'PYCHARM_MATPLOTLIB_PORT': '54038', 'PYTHONIOENCODING': 'UTF-8', 'PYTHONPATH': 'F:\\pycharm\\PyCharm 2018.1.2\\helpers\\pycharm_matplotlib_backend;D:\\MyPythonSource', 'PYTHONUNBUFFERED': '1', 'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:\\WINDOWS', 'TEMP': 'C:\\Users\\Trony\\AppData\\Local\\Temp', 'TMP': 'C:\\Users\\Trony\\AppData\\Local\\Temp', 'USERDOMAIN': 'DESKTOP-BVPBT0E', 'USERDOMAIN_ROAMINGPROFILE': 'DESKTOP-BVPBT0E', 'USERNAME': 'Trony', 'USERPROFILE': 'C:\\Users\\Trony', 'VIRTUAL_ENV': 'D:\\MyPythonSource\\venv', 'WINDIR': 'C:\\WINDOWS', '_OLD_VIRTUAL_PATH': 'C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;F:\\jdk\\bin;F:\\jdk\\jre\\bin;C:\\WINDOWS\\System32\\OpenSSH\\;F:\\git\\Git\\cmd;F:\\python36\\Scripts\\;F:\\python36\\;C:\\Users\\Trony\\AppData\\Local\\Microsoft\\WindowsApps;', '_OLD_VIRTUAL_PROMPT': '$P$G'})

# os.path路径相关
import os

# 返回规范化的据对路径 os.path.split(path)将path分割成目录和文件名二元组返回
print(os.path.abspath('dirname'))
print(os.path.split(os.path.abspath('dirname')))
>>>
D:\MyPythonSource\常用模块\os模块\dirname
('D:\\MyPythonSource\\常用模块\\os模块', 'dirname')


# 返回path的目录,其实就是os.path.split(path)的第一个元素
print(os.path.basename('dirname')) #返回path最后的文件名。
print(os.path.dirname('dirname'))
>>>
dirname
D:\\MyPythonSource\\常用模块\\os模块


os.path.exists(path) 判断path是否存在
os.path.isabs(path)  判断path是否时绝对路径
os.path.isfile(path)  判断是否是文件
os.path.isdir(path)   判断是否是目录


# 拼目录,不关心是否存在
print(os.path.join(r'c:\\', 'user'))
>>>
c:\\user


# os.path.getatime(path)  返回path所指向的文件或这目录的最后访问时间
# os.path.getmtime(path)   返回path所指向的文件或者目录的最后修改时间


# 获取path的大小,计算文件夹一般不准,计算文件准
print(os.path.getsize(os.getcwd()))
>>>
0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值