ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python 内置模块续写

2021-11-26 21:00:24  阅读:158  来源: 互联网

标签:内置 python 续写 random import print path BoyClass os


[toc]

python 内置模块续篇

image

接上篇python内置模块,续写下面的模块

  • random模块:随机数
  • os模块:操作系统相关的模块
  • sys模块:python解释器常用的模块
  • json模块:数据交互专用模块
  • subprocess模块:远程操作经常使用的模块

1. random随机数模块

random模块的方法如下:

  • random.random():随机产生一个0-1之间的小数
  • random.randint(a,b):随机产生一个a-b之间的整数
  • random.uniform(a,b):随机产生一个a-b之间的小数
  • random.choice(seq):随机从序列里等概率的抽取一个元素
  • random.sample(population,k,count):随机抽取指定数量的样本
  • random.shuffle(list):随机打乱容器中的诸多元素

方法使用示例:

1、random()方法

import random
# 随机生成一个0-1之间的随机数
num = random.random()
print(num)
# >>>0.9158120687169333

2、randint(a,b)方法

import random
# 随机生成一个范围内的随机数
num = random.randint(0,10)
print(num)
# >>>3

3、uniform(a,b)方法

import random
# 随机生成一个范围内的小数
num = random.uniform(0,5)
print(num)
# >>>2.3192301761260783

4、choice(seq)方法

import random
# 随机抽取一个元素:抽奖示例
num = random.choice(['特等奖','一等奖','二等奖','三等奖','参与奖','谢谢惠顾'])
print(num)
# >>>特等奖

5、sample(population,k,count)方法

import random
# 随机抽取定量样本,一次性抽取两个
num = random.sample(['河北省','河南省','山东省','山西省','北京市','上海市'],2)
print(num)
# >>>['山西省', '北京市']

6、shuffle(list)方法

import random
# 打乱容器内的元素,洗牌示例
lst_card = [2,3,4,5,6,7,8,9,10,'A','J','Q','k',]
random.shuffle(lst_card) # 打乱顺序,洗牌
print(lst_card)
# >>>[3, 'Q', 9, 4, 7, 2, 'A', 6, 'J', 10, 5, 8, 'k']

7、random模块综合练习

'''
搜狗公司笔试题
随机验证码可以是由 数字 小写字母 大小写字母 任意组合
编写能够产生五位数的随机验证码
ps:五位 每位都可以是三种情况之一
'''
# 验证码的随机性,使用random
import random


for i in range(5):
    code_num = random.randint(0, 9)  # 获取0-9内的随机数
    code_lower = chr(random.randint(97, 122))  # 获取a-z的字符,数字转换为ASCII
    code_upper = chr(random.randint(65, 90))  # 获取A-Z的字符,数字转换为ASCII
    # 随机抓取任意一个
    get_code = random.choice([code_num,code_lower,code_upper])
    print(get_code,end='')

升级版本

import random

# 定义一个可以获取任意长度的验证码函数
def get_anylen_code(n):
    code = ''
    for i in range(n):
        code_num = str(random.randint(0, 9))  # 获取0-9内的随机数
        code_lower = chr(random.randint(97, 122))  # 获取a-z的字符,数字转换为ASCII
        code_upper = chr(random.randint(65, 90))  # 获取A-Z的字符,数字转换为ASCII
        # 随机抓取任意一个
        get_code = random.choice([code_num,code_lower,code_upper])
        # print(get_code,end='')
        code+=get_code
    return code

# 获取10位验证码
print(get_anylen_code(10))  # >>>0AP9xSUmFY
# 获取6位验证码
print(get_anylen_code(6)) # >>>2q6de0
# 获取4位验证码
print(get_anylen_code(4)) # >>>k3Y1

2、os模块

该模块经常和操作系统”打交道“,os模块的搭配使用方法如下:

  • os.mkdir(文件夹):创建单级目录
  • os.makedirs(多级文件夹):创建多级目录
  • os.rmdir(文件夹):删除空目录
  • os.removedirs(多级文件夹):删除多级空目录
  • os.path.dirname(__ file __):获取当前文件所在的路径(可以嵌套使用,则位上一层路径)
  • os.path.join(路径1,路径2):用于路径拼接
  • os.listdir(路径):列举出指定路径下的文件名称
  • os.remove(文件名):删除一个文件
  • os.rename(oldname,newname):修改文件名称
  • os.getcwd():获取当前工作路径
  • os.chdir(路径):切换路径
  • os.path.exists(文件名):判断当前路径是否存在
  • os.path.isfile(文件):判断当前路径是不是文件
  • os.path.isdir(文件夹):判断当前路径是否为文件夹
  • os.path.getsize(文件名):获取文件内容大小,以下字节数输出

方法使用示例:

1、mkdir(文件夹)方法

创建单层目录

import os
# 创建单层目录
os.mkdir(r'HammerZe')
# 创建多层目录报错
os.mkdir(r'HammerZe\Ze')

2、makedirs(多级文件夹)方法

创建多层目录

import os

# 创建多层目录
os.makedirs(r'HammerZe\Ze')

3、rmdir(文件夹)方法

该方法只能删除单级空目录

import os

# 删除单层目录
os.rmdir(r'E:\Old_BoyClass_fourth\Ze')
'''Ze文件是我提前创建好的'''

4、removedirs(多级文件夹)

该方法虽然能写多层路径,但是也只能删除空目录

import os

# 删除单层目录
os.removedirs(r'E:\Old_BoyClass_fourth\HammerZe')

5、os.path.dirname(__ file __)方法

获取当前文件路径,可以嵌套使用返回上一层路径

import os
# 获取当前文件所在路径
print(os.path.dirname(__file__)) 
# >>>E:/Old_BoyClass_fourth
# 嵌套使用,获取上一层路径
print(os.path.dirname(os.path.dirname(__file__)))
# >>>E:/

6、os.path.join(路径1,路径2)

路径拼接

import os
# 路径拼接
# 获取当前文件路径
now_dir = os.path.dirname(__file__)
print(now_dir) #E:/Old_BoyClass_fourth/join
# 路径拼接,找到test.py文件
join_dir = os.path.join(now_dir,'test.py')
print(join_dir)
# E:/Old_BoyClass_fourth/join\test.py

7、listdir(路径)

列出指定目录下的文件名称,文件名以列表的形式组织返回

import os
# 显示指定路径下的文件名称
find_dir = os.listdir(r'E:\Old_BoyClass_fourth\Mv')
print(find_dir)

'''a,b,c文件我自己建的'''
# ['a.txt', 'b.txt', 'c.txt']
import os
# 进阶练习:获取指定目录的文件,选择文件可以进入

# 获取当前文件路径
now_dir = os.path.dirname(__file__) # >>> E:/Old_BoyClass_fourth
# 拼接第一层
one_join = os.path.join(now_dir,r'E:\Old_BoyClass_fourth\Mv') # >>E:\Old_BoyClass_fourth\Mv
# 获取指定目录下的文件
dir_list= os.listdir(r'E:\Old_BoyClass_fourth\Mv')  # ['a.txt', 'b.txt', 'c.txt']
# 通过枚举的形式使得文件名由索引值
for index,values in enumerate(dir_list,1):
    print(index,values)
# 获取想要查看的文件序号
select_num = input('please input your select number>>>:').strip()
if select_num.isdigit():
    select_num = int(select_num)
    # 获取文件的索引不能超过文件的个数
    if select_num in range(len(dir_list)+1):
        # 索引获取对应的文件名称
        file_name = dir_list[select_num-1]
        # 拼接文件路径,获取a,b,c文件的精确位置
        dir_join = os.path.join(one_join,file_name)
        # 读取文件
        with open(dir_join,'r',encoding='utf8') as read_f:
            print(read_f.read())

8、remove(文件名)

删除一个文件

import os
os.remove(r'E:\Old_BoyClass_fourth\Mv\drop.py')

9、rename(oldname,newname)

修改文件名

import os
os.rename('Mv','findtxt')

10、getcwd()

获取当前工作路径

import os
# 获取当前工作路径
print(os.getcwd()) # E:\Old_BoyClass_fourth

11、chdir(路径)

切换路径

import os
# 获取当前工作路径
print(os.getcwd()) # E:\Old_BoyClass_fourth
os.chdir('D:')
print(os.getcwd()) # D:\

12、os.path.exists(文件名)

判断当前路径是否存在

import os
# 存在的情况输出True
print(os.path.exists(r'E:\Old_BoyClass_fourth\findtxt\a.txt'))
print(os.path.exists(r'E:\Old_BoyClass_fourth\findtxt\b.txt'))
# True 
# True

# 不存在的情况输出False
print(os.path.exists(r'E:\Old_BoyClass_fourth\findtxt\z.txt'))
# >>>False

13、os.path.isfile(文件)

判断是否为文件

import os

# E:\Old_BoyClass_fourth\findtxt\a.txt'
print(os.path.isfile(r'E:\Old_BoyClass_fourth\findtxt\a.txt'))
print(os.path.isfile(r'E:\Old_BoyClass_fourth\findtxt'))
# True
# False

14、os.path.isdir(文件夹)

判断是否为文件夹

import os

# E:\Old_BoyClass_fourth\findtxt\a.txt'
print(os.path.isdir(r'E:\Old_BoyClass_fourth\findtxt\a.txt'))
print(os.path.isdir(r'E:\Old_BoyClass_fourth\findtxt'))
# False
# True

15、os.path.getsize(文件名)

获取文件内容的大小,以字节数输出

import os

print(os.path.getsize(r'E:\Old_BoyClass_fourth\findtxt\a.txt'))
# a文本内容:a文件
# 结果>>>7,a为一个字节,文件为六个字节

3、sys模块

  • sys.path:获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到,也可以自定义添加模块路径(重点)
    • sys.path.append(路径)
  • sys.version:获取版本号
  • sys.platfotm:获取当前系统平台
  • sys.argv:获取当前执行文件的绝对路径(重点)

1、sys.path、sys.version、sys.platfotm

import sys

print(sys.path)
print(sys.version)
# 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)]
print(sys.platform)
# win32

sys.path在自定义模块中讲过~

2、sys.argv[ ]

  • sys.argv其实就是一个列表,里边的项为用户输入的参数,关键就是要明白这参数是从程序外部输入的,而非代码本身的什么地方,要想看到它的效果就应该将程序保存了,从外部来运行程序并给出参数。(定义总结参考[arg]([Python中 sys.argv]的用法简明解释 - 覆手为云p - 博客园 (cnblogs.com)))

arg不跟[ ]返回的是文件的绝对路径

import sys
print(sys.argv) # >>>['E:/Old_BoyClass_fourth/test.py']

arg跟[]就是从外部获取参数,来返回一个列表,打开cmd运行py文件演示:

import sys
print(sys.argv) # >>>['E:/Old_BoyClass_fourth/test.py']

index_v = sys.argv[1]
print(index_v)

image

添加一个argv[2]:

import sys
print(sys.argv) # >>>['E:/Old_BoyClass_fourth/test.py']

index_v = sys.argv[1]
index_v2 = sys.argv[2]
print(index_v,index_v2)

image

动态演示:

import sys
index_v = sys.argv[1]
index_v2 = sys.argv[2:]
print(index_v,index_v2)

image


4、json模块

在不同的编程语言中怎么可以无障碍传输,中间这个“翻译官”谁来做,比如在python中的列表,到js中就变成了数组,这时候,json模块就可以做“翻译官”,json模块的主要作用是用来跨语言传输

  • json字符串的标识就是双引号,带双引号的字符串为json字符串
  • 过程:
    • 序列化:dumps()方法
    • 反序列化:loads()方法
  • jsom模块只支持部分数据类型序列化,如下:
Supports the following objects and types by default:
+-------------------+---------------+
| Python            | JSON          |
+===================+===============+
| dict              | object        |
+-------------------+---------------+
| list, tuple       | array         |
+-------------------+---------------+
| str               | string        |
+-------------------+---------------+
| int, float        | number        |
+-------------------+---------------+
| True              | true          |
+-------------------+---------------+
| False             | false         |
+-------------------+---------------+
| None              | null          |
+-------------------+---------------+
import json

dic = {'username': 'HammerZe', 'pwd': 123}
str_json = json.dumps(dic)
print(str_json)
# 序列化结果:{"username": "HammerZe", "pwd": 123}

dic_json = json.loads(str_json)
print(dic_json)
# 反序列化:{'username': 'HammerZe', 'pwd': 123}

# 文件存储
with open(r'E:\Old_BoyClass_fourth\findtxt\a.txt','w',encoding='utf8') as w_f:
    str_json = json.dumps(dic)
    w_f.write(str_json)

with open(r'E:\Old_BoyClass_fourth\findtxt\a.txt','r',encoding='utf8') as r_f:
    res = r_f.read()
    print(json.loads(res))
    
# 结果
{"username": "HammerZe", "pwd": 123}
{'username': 'HammerZe', 'pwd': 123}
{'username': 'HammerZe', 'pwd': 123}

  • dump(序列化对象,文件)
  • load(序列化对象,文件)

这两个方法是对dumps和loads的简写,实现将字典序列化写入文件和反序列化取出

import json

dic = {'username': 'HammerZe', 'pwd': 123}
# 文件存储
with open(r'E:\Old_BoyClass_fourth\findtxt\a.txt','w',encoding='utf8') as w_f:
    seq_str = json.dump(dic,w_f)

with open(r'E:\Old_BoyClass_fourth\findtxt\a.txt','r',encoding='utf8') as r_f:
    nonseq_str = json.load(r_f)
    print(nonseq_str)
    
# 结果
# {'username': 'HammerZe', 'pwd': 123}

5、subprocess模块

此模块可以基于网络连接上一台计算机,让连接上的计算机执行我们需要执行的命令,最后将命令结果返回

  • cmd查看当前正在运行的命令

image

  • 在pycharm中使用问win终端的命令
import subprocess
# 当前系统中正在运行的进程
res = subprocess.Popen('tasklist',
                       shell=True,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE
                       )
print('stdout',res.stdout.read().decode('gbk'))  # 获取正确命令执行之后的结果
print('stderr',res.stderr.read().decode('gbk'))
'''windows电脑内部编码默认为GBK'''

image


image

标签:内置,python,续写,random,import,print,path,BoyClass,os
来源: https://www.cnblogs.com/48xz/p/15609309.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有