Python入门-常用模块
1.sys,os
import sys
import os #获取当前的路径
print(sys.path[0])
print(os.getcwd())
print(os.path.abspath(".")) #绝对路径
"""
C:\Users\john\Desktop\code
C:\Users\john\Desktop\code
C:\Users\john\Desktop\code
""" #获取默认的编码规则
print(sys.getdefaultencoding())
# utf-8 #获取当前的平台
print(sys.platform)
print(os.name)
"""
win32
nt
'posix'-表示Linux
'nt'----表示Windows
""" #获取当前目录下的文件名和文件名
os.listdir() #删除文件,文件夹
os.remove('文件名')
os.rmdir('hahaha/linghuchong') #创建文件夹,递归文件夹
os.makedirs('hahaha/linghuchong') #文件重命名
os.rename('test','test_new') #执行shell命令
os.system('pwd') #显示当前平台下路径分隔符
os.sep #给出当前平台使用的行终止符
os.linesep
"""
'\n' #linux
'\r\n' #windows #获取系统环境变量
os.environ
"""
#获取父目录,子目录
res = os.getcwd()
print("当前路径:",res)
print("当前的绝对路径:",os.path.abspath(res))
print("当前路径父目录:",os.path.dirname(res))
print("返回该路径的最后一个目录或者文件",os.path.basename(res) )
print("路径是否是一个文件:",os.path.isfile(res))
print("路径是否是一个目录:",os.path.isdir(res))
print("获取文件或者目录信息:",os.stat(res))
"""
当前路径: C:\Users\john\Desktop\code
当前的绝对路径: C:\Users\john\Desktop\code
当前路径父目录: C:\Users\john\Desktop
返回该路径的最后一个目录或者文件 code
路径是否是一个文件: False
路径是否是一个目录: True
获取文件或者目录信息: os.stat_result(st_mode=16895, st_ino=476537135571141335, st_dev=958370624, st_nlink=1, st_uid=0, st_gid=0, st_size=4096, st_atime=1634220837, st_mtime=1634220837, st_ctime=1622276463)
""" #目录分割与合并
print("路径进行操作分割:",os.path.split(res))
print("目录与文件名链接:",os.path.join(res,'test'))
"""
路径进行操作分割: ('C:\\Users\\john\\Desktop', 'code')
目录与文件名链接: C:\Users\john\Desktop\code\test
""" if len(sys.argv) == 1:
print("程序没有输入参数")
sys.exit(0)
else:
print("=======")
for i in sys.argv:
print(i)
"""
=======
D:\anaconda\lib\site-packages\ipykernel_launcher.py
-f
C:\Users\Lenovo\AppData\Roaming\jupyter\runtime\kernel-83ae40ea-1212-46ac-b201-0a7428d93e37.json
"""
2.copy
使用copy模块需要先导入
copy分为:浅拷贝【copy.copy( 对象)】,深拷贝【copy.deepcopy(对象)】
引用传递赋值
# 引用不可变对象时==================================================================================
a = 22
b =a
print(a)
print(b)
print(id(a))
print(id(b))
print("开始修改源数据:")
a=99
print(a)
print(b)
print(id(a))
print(id(b)) #
"""
22
22
140704197061072
140704197061072
开始修改源数据:
99
22
140704197063536
140704197061072
"""
引用对象的id和源对象id一致
当源对象改变后,引用对象id还是源对象id # 引用可变对象时================================================================================
a = dict(name="tom",age=22)
b =a
print(a)
print(b)
print(id(a))
print(id(b))
print("开始修改源数据:")
a["age"]=99
print(a)
print(b)
print(id(a))
print(id(b))
"""
{'name': 'tom', 'age': 22}
{'name': 'tom', 'age': 22}
2133159287104
2133159287104
开始修改源数据:
{'name': 'tom', 'age': 99}
{'name': 'tom', 'age': 99}
2133159287104
2133159287104
"""
不管是否修改数据,引用传递的id和源对象id,始终保持一致
当拷贝对象为不可变对象时,无论深浅拷贝,对象id不变
import copy #使用copy需要先导入 a = "hello word"
b = copy.copy(a)
print(id(a))
print(id(b))
c = copy.deepcopy(a)
print(id(c)) import copy
a = "hello word"
b = copy.copy(a)
print(id(a))
print(id(b))
c = copy.deepcopy(a)
d = copy.deepcopy(b)
print(id(c))
print(id(b)) """
2900547798000
2900547798000
2900547798000
2900547798000
"""
当拷贝对象为可变对象,且子对象没有可变对象
无论深浅拷贝,都等于引用传递
import copy
list1 = [ i for i in range(10)]
a = copy.copy(list1)
b = copy.copy(list1)
c = copy.deepcopy(list1)
d = copy.deepcopy(list1)
print(a)
print(b)
print(c)
print(d)
print(id(a))
print(id(b))
print(id(c))
print(id(d))
print("开始修改源对象列表===========")
list1.append(999)
print(list1)
print(id(list1))
print("已经改完了===================")
print(a)
print(b)
print(id(a))
print(id(b))
print("深拷贝:")
print(c)
print(d)
print(id(c))
print(id(d))
"""
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2133159968192
2133159967872
2133159968128
2133159964864
开始修改源对象列表===========
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 999]
2133159967936
已经改完了===================
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2133159968192
2133159967872
深拷贝:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2133159968128
2133159964864
"""
当拷贝对象为可变对象,且子对象有可变对象
深拷贝对象完全独立,子对象地址也是独立的。
浅拷贝只拷贝第一层地址,不会拷贝第二层地址
import copy
list1 = [ i for i in range(10)] + [[1,2,3]]
a = copy.copy(list1)
b = copy.copy(list1)
c = copy.deepcopy(list1)
d = copy.deepcopy(list1)
print(a)
print(b)
print(c)
print(d)
print(id(a))
print(id(b))
print(id(c))
print(id(d))
print("开始修改源对象的子列表===========")
list1[-1].append(999)
print(list1)
print(id(list1))
print("已经改完了===================")
print("浅拷贝:")
print(a)
print(b)
print(id(a))
print(id(b))
print("深拷贝:")
print(c)
print(d)
print(id(c))
print(id(d))
"""
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, [1, 2, 3]]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, [1, 2, 3]]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, [1, 2, 3]]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, [1, 2, 3]]
2133159151360
2133159152832
2133159151872
2133159135872
开始修改源对象的子列表===========
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, [1, 2, 3, 999]]
2133158973824
已经改完了===================
浅拷贝:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, [1, 2, 3, 999]]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, [1, 2, 3, 999]]
2133159151360
2133159152832
深拷贝:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, [1, 2, 3]]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, [1, 2, 3]]
2133159151872
2133159135872
"""
3.偏函数partial
# 不使用偏函数的调用如下:
def add(a,b,c =2):
return a + b +c
add(2,3,4) # 9 from functools import partial #使用偏函数,需要先导入模块
def add(a,b,c =2):
return a + b +c
res = partial(add,100,200) #偏函数调用
print(res())
print(res(30))
"""
302
330
"""
使用偏函数,可以减少一些长参数函数的数据传递问题
4.math模块
from math import * print("阶乘计算:", factorial(10))
print("累加计算:", fsum(range(101)))
print("乘方计算:", pow(10,3))
print("对数计算:", log2(10))
print("余数计算:",fmod(10,3) ) # 四舍五入计算,roun
i=4.5
print(round(i)) #偶数.5不会进1,这是bug,修复思路如下
res = (round(i) +1) if (i-0.5) % 2 ==0 else round(i)
print(res) print(round(6.666666,2)) # 也可以设置小数保留位数,6.67
5.random随机数
# randint(开始,结束),获取范围内的一个随机整数==================
import random
randint_num = ""
for i in range(6):
res = random.randint(0,9) # 此处可省列random
randint_num += str(res) print(randint_num)
# 767568 #choice(对象),获取对象中的一个随机数===========================
numbers = [ i*2 for i in range(10)]
print(numbers)
for i in range(5):
print(random.choice(numbers), end=",") #此处的random可省略
"""
16,12,0,18,4,
"""
6.MapReduce数据处理
numbers = list(range(10))
filter_res = list(filter(lambda x : x%2 ==0, numbers)) # 最后进行list转变
print(filter_res)
map_res = list(map(lambda x: x*2, filter_res)) # 最后进行list转变
print(map_res) from functools import reduce
reduce_res = reduce(lambda x,y: x + y, map_res)
print(reduce_res)
"""
[0, 2, 4, 6, 8]
[0, 4, 8, 12, 16]
40
"""
7.hashlib编码模块
import hashlib """
Python中的hashlib中提供了常见的摘要算法【MD5,SHA1等】
摘要算法:哈希算法,散列算法,通过一个函数,把任意长度的数据转换为长度固定的数据,一般使用16进制的字符串表示
通过函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了监测原始数据是否被人篡改过
""" #MD5===========================================
md5 = hashlib.md5()
md5.update("this is a test".encode("utf-8"))
print(md5.hexdigest())
#print("中文23432this is a test".encode("utf-8")) #SHA1===========================================
sha1 = hashlib.sha1()
sha1.update("this is a test".encode("utf-8"))
print(sha1.hexdigest()) """
MD5加密的特点:
1.不同长度的数据,md5的值的长度有可能相等
2.从原始数据计算md5的值速度很快,hashlib.md5()
3.已知一个原始数据和对应的md5字符串,想要找到一个具有相同md5值的原始数据是很困难的,md5的加密是不可逆的
4.如果对原始数据做了任何修改,不管数据量多大,生成的md5的结果完全不同
"""
Python入门-常用模块的更多相关文章
- Python 入门之 模块
Python 入门之 模块 1.模块 (1)模块是什么? 将一些常用的功能封装到一个文件中,那么这个存储着很多常用的功能的py文件,就是模块. 模块就是文件,存放一堆常用的函数.模块,就是一些常用 ...
- python的常用模块之collections模块
python的常用模块之collections模块 python全栈开发,模块,collections 认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文 ...
- python之常用模块
python 常用模块 之 (subprocess模块.logging模块.re模块) python 常用模块 之 (序列化模块.XML模块.configparse模块.hashlib模块) pyth ...
- python之常用模块二(hashlib logging configparser)
摘要:hashlib ***** logging ***** configparser * 一.hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法 ...
- Python学习——python的常用模块
模块:用一堆代码实现了某个功能的代码集合,模块是不带 .py 扩展的另外一个 Python 文件的文件名. 一.time & datetime模块 import time import dat ...
- python 之常用模块
一 认识模块 二 常用模块 (1)re模块 (2)collections模块 一 认识模块 (1)什么是模块 (2)模块的导入和使用 (1)模块是:一个模块就是一个包含 ...
- Python之常用模块--collections模块
认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...
- Python自动化开发之python的常用模块
python常用模块 模块的种类:模块分为三种,分别是自定义模块:内置标准模块(即标准库):开源模块(第三方). 以下主要研究标准模块即标准库:标准库直接导入即可,不需要安装. 时间模块:time , ...
- python基础----常用模块
一 time模块(时间模块)★★★★ 时间表现形式 在Python中,通常有这三种方式来表示时 ...
随机推荐
- 路由的query参数(传参)
路由组件不会在组件里面放自己组件标签. 案例使用嵌套组件的,但是在Message组件下新增了组件Detail.vue index.html //引入bootstrap.css <link rel ...
- centos7下mysql安装
centos7只包含了mariadb的安装源 我们需要到官方下载社区版:https://dev.mysql.com/downloads/ 下载安装包并上传到服务器 安装出现错误 这个是系统自带的Mar ...
- NTFS权限概述
NTFS权限概述 NTFS是我常见的一种磁盘格式,在Windows系统中使用广泛,它打破了FAT的局限性.在我使用ntfs格式分区的时候经常会涉及到ntfs权限设置问题,来帮助我们对文件的处理.那么什 ...
- interrupt(),interrupted() 和 isInterrupted() 的区别
1. 结论先行 interrupt():将调用该方法的对象所表示的线程标记一个停止标记,并不是真的停止该线程. interrupted():获取当前线程的中断状态,并且会清除线程的状态标记.是一个是静 ...
- *****又错一道,不知道为啥。。。 ybt【例5.19】字符串判等
[题目描述] 判断两个由大小写字母和空格组成的字符串在忽略大小写,且忽略空格后是否相等. [输入] 两行,每行包含一个字符串. [输出] 若两个字符串相等,输出YES,否则输出NO. 代码我觉得没啥问 ...
- 依图语音API的C#封装以及调用进行语音转写的处理
对于语音识别,一般有实时语音识别和语音文件的识别处理等方式,如在会议.培训等场景中,可以对录制的文件进行文字的转录,对于转录文字的成功率来说,如果能够转换90%以上的正确语音内容,肯定能减轻很多相关语 ...
- CentOS 7 源码安装 Zabbix 6.0
Zabbix 主要有以下几个组件组成: Zabbix Server:Zabbix 服务端,是 Zabbix 的核心组件.它负责接收监控数据并触发告警,还负责将监控数据持久化到数据库中. Zabbix ...
- docker基础命令,常用操作
docker基础命令 使用docker镜像 获取镜像 从docker registry获取镜像的命令是docker pull.命令格式是: docker pull [选项][docker regist ...
- 玩转OpenMLDB社区,四张角色卡待解锁
关于OpenMLDB OpenMLDB 是一个开源机器学习数据库,提供企业级 FeatureOps 全栈解决方案.OpenMLDB 致力于闭环解决 AI 工程化落地的数据治理难题,并且已经在上百个企业 ...
- [SPDK/NVMe存储技术分析]011 - 内核态ib_post_send()源码剖析
OFA定义了一组标准的Verbs,并在用户态提供了一个标准库libibverbs.例如将一个工作请求(WR)放置到发送队列的Verb API是ibv_post_send(), 但是在Linux内核,对 ...