day18 python模块 random time sys os模块
2024-09-03 07:42:01
day18 python
一.random模块
取随机整数
import random
print(random.randint(1,2)) #顾头顾尾
print(random.randrange(0, 100, 2)) #range版本的random
取随机小数
print(random.random()) #0.6871190861419696 #取 0 和 1 之间的小数:
print(random.uniform(1,2)) #1.2328185234579951 #取范围内的小数
从一个列表中随机抽取值
lst = [1,2,3,'bajie','wukong',[1,2]]
print(random.choice(lst)) #从列表随机取一个值
print(random.sample(lst, 2)) #从列表随机取n个值; 当n = len(lst)时, 相当于打乱列表的顺序
打乱一个列表的顺序
lst = [1,2,3,'bajie','wukong',[1,2]]
random.shuffle(lst) #洗牌, 牌不变, 顺序变了: 不返回新lst, 改的是源数据, 实际比上面的n = len(lst)节省空间
print(lst)
二.time模块
time.sleep()
time.sleep(5)
时间格式
格式化时间: 字符串数据类型, '2019-09-01 09:26:00'
print(time.strftime('%Y-%m-%d')) #Y m d H M S (a A(Sun Sunday)) (b B(Sep September)) I(12个小时) c(Sun Sep 1 09:43:02 2019)
时间戳时间: 浮点型数据类型, 1567301229.3193293, 以s为单位, 是从1970-01-01 00:00:00开始计算的偏移量
print(time.time())
结构化时间: 类元组类型, time.struct_time(tm_year=2019, tm_mon=9, tm_mday=1, tm_hour=9, tm_min=31, tm_sec=21, tm_wday=6, tm_yday=244, tm_isdst=0)
tm_isdst=0 是否夏令时, 拿到的是北京时间: 夏天时把时间调快两个小时, 冬天时调回去.
出现的目的: 是为了作为时间戳时间和格式化时间的中间状态来使用的
print(time.localtime()) #拿到的是北京本地时间
print(time.gmtime()) #拿到的是英国伦敦时间
print(time.localtime().tm_year)
时间格式转换, 格式化时间和时间戳时间不能直接转换
print(time.localtime(1567301229))
print(time.strftime('%Y-%m-%d', time.localtime(1567301229))) #时间戳转成字符串时间
print(time.strptime('2019-09-01', '%Y-%m-%d')) #告诉p程序你的字符串时间的格式是什么
print(time.mktime(time.strptime('2019-09-01', '%Y-%m-%d'))) #字符串转成时间戳时间
三.sys模块
sys模块不是和os打交道的, 而是和python解释器打交道的
sys.argv
print(sys.argv) #获取程序名(python命令后面的第0个值), 以及其他位置参数, 返回一个列表
sys.path
print(sys.path) #python解释器, import的时候去找(模块)文件的路径, 返回的是列表, 顺序查找,找完即停止查找
#第一个元素是当前路径,所以你起的模块名会覆盖python的模块名的原因
sys.modules
print(sys.modules) #{import到内存中的所有模块的名字: 内存地址}, 返回的是字典
print(sys.modules['sys']) #<module 'sys' (built-in)>
print(sys) #<module 'sys' (built-in)>
四.os模块
和操作系统打交道的模块
和文件和文件夹的创建有关系的
os.rename() #默认会把原来的文件干掉
os.remove() #删文件
os.makedirs('dir1/dir2') #mkdir -p
os.mkdir('dir3') #mkdir
os.rmdir('dir1/dir2') #dir2没了, dir1还在 #目录下有东西就删不了
os.removedirs('dir1/dir2') #dir2和dir1全没了, #目录下有东西就删不了
os.listdir() #返回一个列表, 里面都是相对路径
print(os.stat('practice.py'))
#os.stat_result(st_mode=33206, st_ino=11821949021878792, st_dev=216124917, st_nlink=1, st_uid=0, st_gid=0, st_size=69713, st_atime=1567312230, st_mtime=1567312223, st_ctime=1565770063)
# inode保护模式 iNode节点号 inode驻留的设备 inode的连接数 uid gid 字节单位的大小 上次访问时间 最后一次修改时间 操作系统对应报告的ctime
和执行操作系统的命令有关系的
os.system('dir') #执行命令行的命令, 没有返回值, 和exec()一样去执行就完了
print(os.popen('dir')) #返回的是对象 #基本不用, 因为没有subprocess强大
print(os.popen('dir').read())
print(os.getcwd()) #获取当前工作路径(current work directory), 并不是指当前文件所在的目录
os.chdir() #切换当前的工作目录
和操作系统的路径有关系的
os.path.join() #路径拼接, linux 和 window的路径分隔符会自己判断然后加上
print(os.path.abspath('practice.py')) #1.把不规范的杠改成操作系统默认的格式 2."拼接"成绝对路径(你写什么它就拼什么)
print(os.path.split('C:/Users/THINKPAD/PycharmProjects/s15/day01')) #用斜杠分成两部分, 返回一个元组
print(os.path.dirname('C:/Users/THINKPAD/PycharmProjects/s15/day01')) #os.path.split 前面那项
print(os.path.basename('C:/Users/THINKPAD/PycharmProjects/s15/day01')) #os.path.split 后面那项
print(os.path.exists('C:/Users/THINKPAD/PycharmProjects/s15/day01'))
print(os.path.isdir('C:/Users/THINKPAD/PycharmProjects/s15/day01'))
print(os.path.isfile('C:/Users/THINKPAD/PycharmProjects/s15/day01'))
print(os.path.isabs('C:/Users'))
print(os.path.getatime())
print(os.path.getmtime())
print(os.path.getsize()) #文件大小 #文件夹大小至少都是4kB
练习
验证码:
# 4位数字验证码
# 6位数字验证码
# 6位数字+字母验证码
import random
def code(num, flags='d'):
s = ''
for i in range(num):
rand_d = str(random.randint(0,9)) #random digit
rand_a = chr(random.randint(97, 97+25)) #random alpha lowwer
rand_A = chr(random.randint(65, 65+25)) #random appha upper
if flags == 'd': #digit
s += rand_d
if flags == 'a': #digit + alpha
s += random.choice((rand_d,rand_a,rand_A))
return s
print(code(4))
print(code(6))
print(code(4, flags='a'))
print(code(6, flags='a'))
练习
1. 查看一下 2000000000 时间戳时间表示的年月日
print(time.strftime('%Y-%m-%d',time.localtime(2000000000)))
2. 将2008-8-8转换成时间戳时间
print(time.mktime(time.strptime('2008-8-8','%Y-%m-%d')))
3. 请将当前时间的当月一号的时戳取出来 - 函数
def func(localtime):
str_time = '%s-%s-%s %s:%s:%s' % (localtime.tm_year,
localtime.tm_mon,
1,
localtime.tm_hour,
localtime.tm_min,
localtime.tm_sec)
return time.mktime(time.strptime(str_time, '%Y-%m-%d %H:%M:%S'))
print(func(time.localtime()))
4. 计算时间差
2018-8-19 22:10:8 2018-8-20 11:07:3
经过了多少时分秒
def func(start_time, end_time):
sub_timestamp = abs(time.mktime(time.strptime(end_time,'%Y-%m-%d %H:%M:%S')) - time.mktime(time.strptime(start_time,'%Y-%m-%d %H:%M:%S')))
#return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(sub_time)) #1970-01-01 20:56:55
sub_gmtime = time.gmtime(sub_timestamp)
return '过去了%s年%s月%s日%s时%s分%s秒' % (sub_gmtime.tm_year-1970,
sub_gmtime.tm_mon-1,
sub_gmtime.tm_mday-1,
sub_gmtime.tm_hour,
sub_gmtime.tm_min,
sub_gmtime.tm_sec)
print(func('2018-8-20 11:07:3','2018-8-19 22:10:8'))
5.统计文件夹大小(文件夹下面所有文件的大小)
递归求
import os
filepath = r'C:\Users\THINKPAD\PycharmProjects\s15'
def func(filepath):
files = os.listdir(filepath)
size_sum = 0
for file in files:
file_path = os.path.join(filepath, file) #file_path为啥不能用 path: 在循环里, 下次循环的path变了,
if os.path.isdir(file_path):
size = func(file_path) #如果是目录, 目录下面返回一个总size, 要加到 size_sum里面
size_sum += size
else:
size = os.path.getsize(file_path)
size_sum += size
return size_sum
print(func(filepath))
循环求: 堆栈的思想
size_sum = 0
lst = [r'C:\Users\THINKPAD\PycharmProjects\s15\day01']
while lst:
filepath = lst.pop()
for name in os.listdir(filepath):
file_path = os.path.join(filepath, name)
if os.path.isdir(file_path):
lst.append(file_path) #循环解决递归的方法
else:
size = os.path.getsize(file_path)
size_sum += size
print(size_sum)
最新文章
- 利用crontab系统每天定时备份MySQL数据库
- 轻松实现Android,iOS的一个手势动画效果
- 关于jackson处理数据
- 【原创】Kakfa serializer包源代码分析
- Linux下C语言高手成长路线(转载)
- TMethod
- [转]Net 下采用GET/POST/SOAP方式动态调用WebService C#实现
- RCF
- sublime 经验总结 主题有 less2css
- 发现可高速缓存的 SSL 页面
- Java Annotation手册
- jQuery Ajax 分页插件
- 西南民大oj(递推)
- Git 和 GitHub 使用
- iOS WebView你需要的问题答案
- django url路由参数错误
- liunx系统虚拟机下安装tomcat9以及访问tomcat案例
- Fixed Partition Memory Management UVALive - 2238 建图很巧妙 km算法左右顶点个数不等模板以及需要注意的问题 求最小权匹配
- Python3+PyQt5+PyCharm 桌面GUI开发环境搭建
- list转map
热门文章
- 富文本编辑器tinymce支持从word复制粘贴保留格式和图片的插件wordpaster
- 2017ICPC沈阳网络赛 HDU 6205 -- card card card(最大子段和)
- [luogu]P1463 [SDOI2005]反素数ant[dfs][数学][数论]
- android开发里跳过的坑——GridView使用Glide加载图片不显示
- 【转】Django 基本命令
- linux之yum源的RPM软件包管理
- vue双向数据绑定v-model
- elasticsearch 集群搭建及启动常见错误
- 微软手写识别模块sdk及delphi接口例子
- 第1 章 mysql数据库之简单的DDL和DML sql语句