诚意
诚意如你,当一诚的态度对待

导航

 

1     模块random

1.1   取随机小数

print(random.random())      # 取0-1之间的小数
print(random.uniform(2,4))      # 取2-4之间的小数 

1.2   取随机整数

print(random.randint(1,2))  # [1,2]

print(random.randrange(1,2))    #[1,2)

print(random.randrange(1,5,2))  #[1,2)步距2

1.3   从一个列表中随机抽取值

p = [1,2,3,4,(5,6),(7,8)]
print(random.choice(p))     #随机取一个值,可以重复
print(random.sample(p,2))       #随机取值,同时取得值不可以重复,第二个参数是取多少个值。如[3, (5, 6)]

1.4   打乱一个列表的顺序

#打乱一个列表的顺序,在原列表的基础上直接进行修改,节省空间

p = [1,2,3,4,(5,6),(7,8)]
random.shuffle(p)
print(p)

 

1.5   案例

1.5.1 案例1:

验证码 ,实现功能如下:   

(1)4位数字验证码

法一:

for i in range(4):
    print(random.randint(0,9),end='')

法二:

s=''

for i in range(4):

   num = random.randint(0,9)

   s += str(num)

print(s)

(2)6位数字验证码

def suzi(n=6):
    s = ''
    for i in range(n):
        num = random.randint(0,9)
        s += str(num)
    return s

         print(suzi())

(3)6位数字+字母验证码

法一:

 1 s = ''
 2 
 3 for i in range(6):
 4 
 5     num = str(random.randint(0, 9))
 6 
 7     alpha=chr(random.randint(65,90))    #chr()内置函数
 8 
 9     alphA=chr(random.randint(97,122))
10 
11     res=random.choice([num,alphA,alpha]) #注意只能有一个参数
12 
13 s += res
14 
15 print(s) 

 

法二:全能版

 1 def ran(n,zimu=True):
 2     s = ''
 3     for i in range(6):
 4         num = str(random.randint(0, 9))
 5         if zimu:
 6             
 7             alpha=chr(random.randint(65,90))    #chr()内置函数
 8             alphA=chr(random.randint(97,122))
 9             num=random.choice([num,alphA,alpha])    #注意只能有一个参数
10         s += num
11     return s
12 print(ran(6,zimu=False))    #第一个参数是二维码是几位,第二位参数默认有字母,若不添加字母则输入False

 经典案例-发红包

2     模块time时间

2.1   时间格式:

(1)格式化时间(字符串数据类型)

'2018-8-20' '2018.8.20'     - 给人看的

%y 两位数的年份表示(00-99%Y 四位数的年份表示(000-9999%m 月份(01-12%d 月内中的一天(0-31%H 24小时制小时数(0-23%I 12小时制小时数(01-12%M 分钟数(00=59%S 秒(00-59%a 本地简化星期名称

%A 本地完整星期名称

%b 本地简化的月份名称

%B 本地完整的月份名称

%c 本地相应的日期表示和时间表示

%j 年内的一天(001-366%p 本地A.M.或P.M.的等价符

%U 一年中的星期数(00-53)星期天为星期的开始

%w 星期(0-6),星期天为星期的开始

%W 一年中的星期数(00-53)星期一为星期的开始

%x 本地相应的日期表示

%X 本地相应的时间表示

%Z 当前时区的名称

%% %号本身

(2)结构化时间(元组)

      

索引(Index

属性(Attribute

值(Values

0

tm_year(年)

比如2011

1

tm_mon(月)

1 - 12

2

tm_mday(日)

1 - 31

3

tm_hour(时)

0 - 23

4

tm_min(分)

0 - 59

5

tm_sec(秒)

0 - 60

6

tm_wday(weekday)

0 - 6(0表示周一)

7

tm_yday(一年中的第几天)

1 - 366

8

tm_isdst(是否是夏令时)

默认为0

 

(3) 时间戳时间(浮点型数据类型)---->只能取值不能修改

时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。  ,以s为单位 - 给机器计算用的

 

 

2.2   时间格式的转化

 

2.3   案列

import time
#时间戳时间
print(time.time())      #1534755788.514118
#结构化时间
print(time.localtime())
#time.struct_time(tm_year=2018, tm_mon=8, tm_mday=20, tm_hour=17, tm_min=5, tm_sec=43, tm_wday=0, tm_yday=232, tm_isdst=0)
print(time.localtime().tm_mon)  #8

#格式化时间
print(time.strftime('%Y-%m-%d'))    # str format time  2018-08-20
print(time.strftime('%Y-%m-%d %H:%M:%S'))    # 2018-08-20 17:23:53
print(time.strftime('%c'))    # Mon Aug 20 17:25:05 2018

1:查看一下2000000000时间戳的时间

re=time.localtime(2000000000)
rt=time.strftime('%Y-%m-%d',re)
print(rt)

2将2008-8-8转换成时间戳时间

re = time.strptime('2008-8-8','%Y-%m-%d')
rs=time.mktime(re)
print(rs)


3.请将当前时间的当前月1号的时间戳取出来

def tm():
    re=time.localtime()
    rs=time.strptime('%s-%s-1'%(re.tm_year,re.tm_mon),'%Y-%m-%d')
    return time.mktime(rs)
print(tm())

4.计算时间差 - 函数
    # 2018-8-19 22:10:8 2018-8-20 11:07:3
    # 经过了多少时分秒

st_tim1='2018-8-19 22:10:8'
st_tim2='2018-8-20 11:07:3'
str_tim1=time.strptime(st_tim1,'%Y-%m-%d %H:%M:%S')
str_tim2=time.strptime(st_tim2,'%Y-%m-%d %H:%M:%S')
str_stamp1=time.mktime(str_tim1)
str_stamp2=time.mktime(str_tim2)
stru=str_stamp2-str_stamp1
su = time.gmtime(stru)
print("过去了%s年%s月%s日%s小时%s分钟%s秒"%(su.tm_year-1970,su.tm_mon-1,su.tm_mday-1,su.tm_hour,su.tm_min,su.tm_sec))

3     模块sys

功能:sys模块是与python解释器交互的一个接口

 

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

sys.version        获取Python解释程序的版本信息

sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

sys.platform       返回操作系统平台名称

sys.setrecursionlimit(5000) 设置递归的深度

3.1   sys.argv   ---(接受终端命令行传入的参数)

import sys
user = sys.argv[1]
passwd = sys.argv[2]
if user == 'alex' and passwd == 'alex123':
    print('登陆成功')
else:
    exit() 

执行---------》python 路径 参数1   参数2

 sys.argv = ['python文件的路径','参数1','参数2','参数3'...] 

文件名: 文件路径不能有中文 所有的文件名都应该符合变量命名规范
# 整个文件路径不能有空格 不支持中文

作用:

# 1. 程序员 运维人员  在命令行运行代码

# 2. 操作系统input事件 阻塞 退出了CPU的竞争

3.2   sys.path  模块搜索路径

-----》是一个列表,这个列表中存放的都是文件夹的绝对路径

作用:

一个模块能否被顺利的导入 全看sys.path下面有没有这个模块所在的

内置模块和第三方模块安装之后,不需要操作sys.path,直接用就行了

自定义模块的时候 导入模块的时候 如果一个模块导入不进来,那把这个模块的文件夹添加到sys.path中就行了(append())

 

 

print(sys.path)

['E:\\python\\代码\\模块\\random', 'E:\\python\\代码', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages', 'C:\\pycharm\\PyCharm 2018.1.3\\helpers\\pycharm_matplotlib_backend']

3.3   sys.modules

------------所有被导入的模块的内存地址都存在sys.modules里

print(sys.modules)       #是我们导入到内存中的所有模块的名字 : 这个模块的内存地址
print(sys.modules['re'].findall('\d+','a123'))

sys.version 

4     模块os

作用:

 os模块是与操作系统交互的一个接口

4.1   文件操作类相关

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')  获取文件/目录信息

4.2   系统操作相关

os.system("bash command")  运行shell命令,直接显示(执行字符串数据类型的 命令行代码)

os.popen("bash command).read()  运行shell命令,获取执行结果(执行字符串数据类型的 命令行代码)

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径

os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd


os.system('dir 路径')  # 使用python语言直接执行操作系统的命令

os.listdir('路径')     # 使用python语言的os模块提供的方法 间接调用了操作系统命令

 

# exec('字符串数据类型的python代码')

# eval('执行字符串数据类型的python代码')

 

# os.system('执行字符串数据类型的操作系统命令')

# os.popen('执行字符串数据类型的操作系统命令,并返回结果')

# os模块所做的事情

    # 定制了很多方法 间接的帮助你去调用操作系统的命令 获得结果

    # 然后帮助你分析整理成我们需要的数据类型的形态

# 你也可以os.popen/os.system直接取调用操作系统的命令 获得结果

    # 但是 分析和整理的工作需要你自己做

# 用os模块的方法本身能够完成的功能我们就用定制好的方法就够了

# 如果有一天 你发现os模块定制好的功能解决不了我们的问题了

    # 而刚好操作系统的命令能够很好地帮助我们解决问题

    # 这个时候就用os.popen/os.system

 

案例1:查看当前路径内容

os.'system('dir')  # 执行操作系统的命令,没有返回值,----》查看的有乱码

下面的操作无乱码

# ret = os.popen('dir) # s =ret.read()

# print(s)

# print(s.split('\n'))#可以切割查看

案例2:查看指定路径内容

file_st = os.listdir('E:\python')
print(file_st)
for path in file_st:
    print(os.path.join('E:\python',path))       #E:\python\老男孩 

案例3:获取当前工作路径

print('-->',os.getcwd())  # current work dir 当前工作目录

案例4:切换路径并查看该路径内容

os.chdir('E:\\')
ret = os.popen('dir')
s=ret.read()
print(s)

4.3   路径相关

os.path

os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回

os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素

os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素

os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False

os.path.isabs(path)  如果path是绝对路径,返回True

os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False

os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False

os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

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

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

os.path.getsize(path) 返回path的大小

os.path.sep 文件系统分隔符

4.3.1 案例:

4.3.1.1  案例1:os.path.abspath()

1:把路径中不符合规范的/ 改成操作系统默认的格式
path = os.path.abspath('D:/sylar/s15/day19/4.os模块.py')
print(path)         #D:\sylar\s15\day19\4.os模块.py

2:能够给能找到的相对路径改成绝对路径
#在本地路径的基础上加上文件名
path = os.path.abspath('4.os模块.py')
print(path)         #E:\python\代码\模块\20180821模块3\4.os模块.py

4.3.1.2  案例2 os.path.split、os.path.dirname、os.path.basename

1:把一个路径分成两段,第二段是一个文件/文件夹
path = os.path.split('D:/sylar/s15/day19/4.os模块.py')
print(path)         #('D:/sylar/s15/day19', '4.os模块.py')

2:获取分成两段的左右两段
path1 = os.path.dirname('D:/sylar/s15/day19/4.os模块.py')
path2 = os.path.basename('D:/sylar/s15/day19/4.os模块.py')
print(path1)        #D:/sylar/s15/day19
print(path2)        #4.os模块.py

4.3.1.3     案例3:判断文件是否存在os.path.exists

path = os.path.exists('D:/sylar/s15/day19/4.os模块.py')
print(path)         #False

4.3.1.4  案例4:判断是否是绝对路径os.path.isabs

path1 = os.path.isabs('D:/sylar/s15/day19/4.os模块.py')
path2 = os.path.isabs('4.os模块.py')
print(path1)        #True
print(path2)        #False

4.3.1.5  案例5:判断是否是文件夹、文件

print(os.path.isdir(r'E:\python\代码\模块\20180821模块3\课堂.py'))    #False

print(os.path.isfile(r'E:\python\代码\模块\20180821模块3\课堂.py'))   #True

4.3.1.6  案例6:拼接路径

path = os.path.join('D:/sylar/s15/day19/','4.os模块.py')
print(path)         #D:/sylar/s15/day19/4.os模块.py

4.3.1.7  案例7:判断文件大小

方法一:

size = os.path.getsize(r'E:\python\代码\20180821模块3\xx.py')
print(size)         #1846

方法二:

import os
print(os.stat(r'E:\python\代码\20180907\xx.py').st_size)

4.3.1.8  案例8:判断文件夹的大小

 1 1.1.1.4.1 方法一:递归
 2 
 3 
 4 
 5 def func(path):     #参数:要计算的文件夹
 6 
 7     size_name = 0
 8 
 9     name_lst = os.listdir(path)  #查看该路径下内容
10 
11     for i in name_lst:      #遍历该路径下的内容
12 
13         path_name = os.path.join(path,i)    #转成绝对路径
14 
15         if os.path.isdir(path_name):    #如果是文件夹
16 
17             size = func(path_name)
18 
19             size_name += size
20 
21         else:                           #如果是文件
22 
23             size_name += os.path.getsize(path_name)
24 
25     return size_name
26 
27 print(func('E:\python\代码\模块'))
28 1.1.1.4.2     方法二:循环
29 
30 循环(核心思想:堆栈;只要是文件就放到列表里)
31 
32 lst = ['E:\python\代码\模块']   #列表的第一个目录就是我要统计的目录
33 size_name = 0   #此变量用于统计大小
34 while lst:
35     name = lst.pop()    #弹出尾部的文件夹
36     name_lst = os.listdir(name) #列出弹出的文件夹下面的内容
37     for  i in name_lst:     #判断显示出的内容,遍历,如果是文件那么统计大小如果是文件夹就放在栈里,等待下次在弹出
38         path = os.path.join(name,i)
39         if os.path.isdir(path):
40             lst.append(path)
41         else:
42             size_name += os.path.getsize(path)
43 print(size_name)

4.3.1.9  案例9:修改文件名

1 # 修改文件名
2 import os
3 import shutil
4 
5 # 方式一:缺陷:py2+win :报错
6 os.rename('a.txt', 'b.txt')
7 # 方式二:
8 shutil.move('b.text', 'c.text')

 

4.3.1.10  案例10:删除文件夹

1 # 删除文件夹
2 法一:
3 import shutil
4 #既能删除空文件夹又能删非空文件夹,能删单极或多级目录
5 shutil.rmtree(r'E:\python\老男孩\代码\网络编程\20180907\a')
6 法二:
7 import os
8 os.removedirs(r'E:\python\老男孩\代码\网络编程\20180907\a') #只能删除空文件夹

 

 

补充:

1 import os
2 print('当前进程:%s启动中...'% os.getpid())
3 print(os.getpid())   #子进程
4 print(os.getppid()) #父进程
View Code

 

posted on 2018-08-20 20:39  诚意  阅读(164)  评论(0)    收藏  举报