首页 > 其他 > 详细

常用模块

时间:2019-07-18 22:07:49      阅读:68      评论:0      收藏:0      [点我收藏+]

 

collection模块:

```python
    在字典,列表,元组,集合的基础上,还提供了具名元组,双端队列,计数器,有序字典,默认字典等
1.namedtuple:具名元组,具有名字的元组
    from collections import namedtuple
    eg1:
    point = namedtuple(坐标,[x,y]) #可以传可迭代对象   也可穿字符串  串间空格隔开
    p = point(1,2)  #元素个数与 namedtuple的第二个参数中的个数一一对应
    print(p.x)
    print(p.y)
    eg2:
    b = namedtuple(扑克,color 大小)
    a = b(,K)
    print(a)
2.depue:双端队列  可以高效的实现添加,删除,插入;适用于队列与栈
       特点:可以根据索引在任意位置插值,正常队列不能插值
    from collections import deque
    q = deque([a,b,c])
    q.append(d)
    q.appendleft(lii)
    b=q.popleft()
    print(b)
    deque除了实现list的append()和pop()外,还支持appendleft()和popleft()
3.OrdereDict:有序字典,平常字典的key是无序的,要让他有序就用有序字典
    无序字典:key无序,无法确定key的顺序
    >>> from collections import OrderedDict
    >>> d = dict([(a, 1), (b, 2), (c, 3)])
    >>> d # dict的Key是无序的
    {a: 1, c: 3, b: 2}
    有序字典:key会根据插入顺序排
    >>> od = OrderedDict([(a, 1), (b, 2), (c, 3)])
    >>> od # OrderedDict的Key是有序的
    OrderedDict([(a, 1), (b, 2), (c, 3)])
4.defaultdict:默认字典
    有集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中;
    老方法:
        values = [11, 22, 33,44,55,66,77,88,99,90]
        my_dict = {}
        for value in  values:
        if value>66:
            if my_dict.has_key(k1):
                my_dict[k1].append(value)
            else:
                    my_dict[k1] = [value]
        else:
            if my_dict.has_key(k2):
                my_dict[k2].append(value)
            else:
                my_dict[k2] = [value]
     新方法:
         from collections import defaultdict
        values = [11, 22, 33,44,55,66,77,88,99,90]
        my_dict = defaultdict(list)
        for value in  values:
            if value>66:
                my_dict[k1].append(value)
            else:
                my_dict[k2].append(value)
5.Counter:计数器,计算个数
       老方法:
         d = {}
        b=[]
        c = sdskhgusdfsdfs
        for i in c:
           b.append(i)
        b.count(i)
        d[i]=b.count(i)
        print(d)
    新方法:
        from collections import Counter
        res = sdskhgusdfsdfs
        print(Counter(res)
```

time模块:

```
表示时间的三张形式:时间戳,格式化时间(用来展示给人看的),时间结构化
import time
1.time.time()        #1500875844.800804
2.time.strftime(%Y-%m-%d %H:%M:%S)         # %X  等价于%H:%M:%S    2019-07-18 20:04:35
3.time.localtime()    #(tm_year=2019, tm_mon=7, tm_mday=18, tm_hour=20, tm_min=3, tm_sec=0)    
三者间的转化:



```

date time模块

```
import datetime
# 自定义日期
res = datetime.date(2019, 7, 15)
print(res)  # 2019-07-15
# 获取本地时间
now_date = datetime.date.today()
print(now_date)  # 2019-07-01
# 年月日时分秒
now_time = datetime.datetime.today()
print(now_time)  # 2019-07-01 17:46:08.214170
print(now_time.year)  # 获取年份2019
print(now_time.month)  # 获取月份7
print(now_time.day)  # 获取日1
print(now_time.weekday())  # 获取星期(weekday星期是0-6) 0表示周一
print(now_time.isoweekday())  # 获取星期(weekday星期是1-7) 1表示周一
# 获得本地日期 年月日
tday = datetime.date.today()
# 定义操作时间 day=7 也就是可以对另一个时间对象加7天或者减少7点
tdelta = datetime.timedelta(days=7)
# 打印今天的日期
print(今天的日期:{}.format(tday))  # 2019-07-01
# 打印七天后的日期
print(从今天向后推7天:{}.format(tday + tdelta))  # 2019-07-08
```

random模块

```
随机小数:random.random(0,1)           (0,1)
随机整数:random.randint(0,9)          [0,9]
洗牌:    random.shuffle([1,3,5])       [1,5,3],打乱次序
摇号:    random.choice([1,3,5])      随机选择一个返回
应用场景:生成随机验证码
    def my(a):
         h =‘‘
         for i in range(a):
             f =chr(random.randint(97,122))
             A =chr(random.randint(65,99))
             c = str(random.randint(0,9))
             h+=random.choice([f,A,c])
         return h
     print(my(5))
```

o s 模块:与操作系统大交到

```python
常用的
os.makedirs(dirname1/dirname2)    可生成多层递归目录
os.removedirs(dirname1)    若目录为空,则删除,并递归到上一级目录同样如此,依此类推
os.mkdir(dirname)    生成单级目录;相当于shell中mkdir dirname
os.rmdir(dirname)    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir(dirname)    列出指定目录下的所有文件和子目录
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat(path/filename)  获取文件/目录信息
os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.getsize(path) 返回path的大小
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回
os.path.dirname(path) 返回path的目录
os.path.isabs(path)  如果path是绝对路径,返回True

融汇贯通:
import os
BASE_DIR = os.path.dirname(__file__)
MOVIE_DIR = os.path.join(BASE_DIR,老师们的作品)
movie_list = os.listdir(MOVIE_DIR)
while True:
    for i,j in enumerate(movie_list,1):
        print(i,j)
    choice = input(你想看谁的啊(今日热搜:tank老师)>>>:).strip()
    if choice.isdigit():  # 判断用户输入的是否是纯数字
        choice = int(choice)  # 传成int类型
        if choice in range(1,len(movie_list)+1):  # 判断是否在列表元素个数范围内
            # 获取用户想要看的文件名
            target_file = movie_list[choice-1]
            # 拼接文件绝对路径
            target_path = os.path.join(MOVIE_DIR,target_file)
            with open(target_path,r,encoding=utf-8) as f:
                print(f.read())

```

sys模块:与python解释器打交到

```python
sys.path.append()  将某个路径添加到系统的环境变量中
sys.argv   命令行参数List,第一个元素是程序本身路径
eg:
    if len(sys.argv) <= 1:
            print(请输入用户名和密码)
    else:
            username = sys.argv[1]
         password = sys.argv[2]
         if username == jason and password == 123:
             print(欢迎使用) 
         else:
             print(用户不存在 无法执行当前文件)
```

序列化与反序列化

```
序列化:就是把其他类型的数据转化为字符串的过程
反序列化:是把字符串转化成其他的数据类型
序列化的目的:让程序便于维护,让对象持久化,以便于传递到其他地方
dump:序列化到文件中               load:从文件中反序列化出来      存
dumps:序列化                     loads:反序列化                 取
json模块
        所有的语言都支持json格式,都认识它
        但其本身支持的数据类型很少  字符串 列表 字典 整型 元组(转成列表)  布尔值
           json 格式的字符串必须是双引号的
           
pickle模块
        只支持python的(自己与自己玩)
        python所有的数据类型都支持
        用pickle操作文件的时候 文件的打开模式必须是b模式
注:写入文件的数据必须是字符串,基于网络传输的数据必须是二进制
--------------------------------------------------------------------------------
import json
dic = {"name": "王彦飞", "age": "18"}
obj = json.dumps(dic,ensure_ascii=False)
print(obj)
user = json.loads(obj)
print(user)
with open(name,w,encoding=utf-8)as f:
    data =json.dump(dic,f)
    print(data)

f = open(name,r,encoding=utf-8)
d = json.load(f)
print(d)
f.close()

f = open(bb,w,encoding=utf-8)
data = json.dumps(hello)
re = json.dumps(what is your name)
f.write(%s\n%data)
f.write(%s\n% re)
print(data)
print(re)
f.close()

with open(bb,r,encoding=utf-8)as f:
    for line in f:
        res = json.loads(line)
        print(line)
--------------------------------------------------------------------------------
import pickle
dic = {name:王彦飞,age:18}
b = pickle.dumps(dic)
print(b)
c = pickle.loads(b)
print(c)
with open(bb,wb) as f:
    data = pickle.dump(dic,f)
with open(bb,rb,) as f:
   b= pickle.load(f)
   print(b)
```

subprocess模块:子进程

```python
进程:指的是一个正在运行中的程序
子进程:指的是由另个一进程开启的进程  a在运行过程中 开启了b   b就是a的子进程
为什么要开启子进程
    当一个程序在运行过程中有一个任务,自己做不了或是不想做 就可以开启另一个进程来帮助其完成任务
    例如 qq中收到一个链接 点击链接 就开启了; 浏览器  浏览器就是qq的子进程
-----------------------------------------------------------------------------------------------------eg:
import subprocess
obj =subprocess.Popen(dir,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
print(obj.stdout.read().decode(gbk))

obj = subprocess.Popen(help,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) print(obj.stdout.read().decode(gbk))

p1 = subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE)
p2=subprocess.Popen("findstrQQ",shell=True,stdin=p1.stdout,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
print(p2.stdout.read())
print(p2.stderr.read())
-----------------------------------------------------------------------------------------------------
subprocess.Poen(参数1:指令,参数2:是否是一个指令,3 错误输出管道,4 输入管道,5 输出管道)
取出管道中的数据
p.stderr.read()
p.stdout.read()
将输入写入管道 交给对方进程
p.stdin.write(p.stdout.read())
```

 

 

 

 

 

 

 

 

 

 

 

 

 

常用模块

原文:https://www.cnblogs.com/wyf20190411-/p/11210048.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!