新手学习python(七)标准模块
模块,其实就是一个python文件。
标准模块: 是指python自带的这些模块,直接import 就能用的。例如string ,random, datetime, os ,json, sys
1)string 模块 (参看新手学习python(三)字符串方法)
2)random 随机模块(生成随机数相关的函数)
import random
random.random() #随机生成(0,1)的浮点数
random.randint(1000,9999) #随机生成1000-9999之间的整数
random.randrange(0,21,2) #随机生成1-21之间的偶数
random.uniform(0,20) #随机生成0,20之间的浮点数
random.choice(['a','b','c','d']) #从列表中随机选一个元素
random.shuffle([1,2,3,4,5]) #对列表元素随机排序
random.sample('abcdefg',2) #从指定序列中随机获取指定长度的片段
3)datetime & time 时间模块
关于time,要了解两个概念:1、时间戳:从unix元年到现在过了多少秒; 2、格式化好的时间,例如 20180523102323 年月日时分秒
3.时间元祖 :time.struct_time(tm_year=2016, tm_mon=7, tm_mday=21, tm_hour=22, tm_min=32, tm_sec=51, tm_wday=3, tm_yday=203, tm_isdst=0) #后三个参数的含义:一周的第几日,一年的第几天,夏令时
time.time() #获取当前时间戳
time.sleep(10) #停顿10秒
time.strftime('%Y-%m-%d %H:%M:%S') #取当前格式化好的时间。格式可变化
time.gmtime() #默认取的是标准时区的时间
time.localtime() #取的当前时区的时间
---时间戳和格式化的时间的相互转换
1.定义一个函数,传入时间戳的话,把时间戳转化成格式化好的时间,返回;默认返回当前格式化好的时间
def timestamp_to_fomat(time=None,format='%Y-%m-%d %H-%M-%S'): #format格式可变化
if timestamp:
time_tuple=time.localtime(timestamp) #时间戳先转成时间元祖
res=time.strftime(format,time_tuple) #时间元祖转成格式化好的时间
else:
res=time.strftime(format) #默认取当前时间
return res
2.定义一个函数,传入格式化好的时间,返回时间戳;默认返回当前时间戳
def strToTimestamp(str=None,format='%Y%m%d%H%M%S'):
if str:
tp=time.strptime(str,format) #先转换成时间元祖
res=time.mktime(tp) #再转换成时间戳
else:
res=time.time() #默认取当前的时间戳
return int(res)
---------------
datetime.datetime.today() #获取当前时间,精确到秒
datetime.date.today() #精确到天
datetime.timedelta(-5) #5天前的时间,还可以minutes=5 ,5分钟后;seconds=5,5秒后;weeks=4 ,4周后
4)os模块,对操作系统的一些操作
os.getcwd() #取当前工作目录
os.chmod('D:/python自动化/day6常用模块/x.py',2) #给文件,目录加权限,对windows不好使,操作linux可用
#r4,w2,x1,即4是读,2是写,1是执行
os.chdir('../') #更改当前目录,更改到上一级目录
os.makedirs('tanzhen\\aaa') #递归创建文件夹,父目录不存在会自动帮忙创建父目录
os.mkdir('test1') #创建文件夹,如果父目录不存在会报错
os.removedirs('tanzhen\\aaa') #递归删除空目录
os.rmdir('test1') #删除指定的文件夹,只能删除空目录
os.remove(test) #删除文件
os.listdir('.') #列出一个目录下的所有文件 .代表当前路径
os.rename('aaa.txt','bbb.txt') #给文件重命名
os.stat('bbb.txt') #获取文件信息
os.sep #当前操作系统的路径分隔符,可用于拼路径,适用于多平台转换
os.linesep #当前操作系统的换行符
os.pathsep #当前系统的环境变量中的每个路径的分隔符
os.environ #当前系统的环境变量
os.name #当前操作系统,windows打印nt,linux打印posix
res=os.system('ipconfig') #执行操作系统命令,但是获取不到结果
res=os.popen('ipconfig').read() #可以获取到命令执行的结果
print(res)
os.path.abspath('.') #获取绝对路径, (.代表当前路径)
os.path.abspath(__file__) #取当前文件的绝对路径,前后都是双下划线
os.path.split('d:\python自动化\\byz-code\day6\\bbb.txt') #分割路径和文件名
os.path.dirname('d:\python自动化\\byz-code') #获取父目录,也就是获取它的上一级目录
os.path.basename('d:\python自动化\\byz-code\\bbb.txt') #获取绝对路径的最后一级,如果是文件显示文件名
os.path.exists("d:\python自动化\\byz-code\day6\\bbb.txt") #判断目录文件是否存在
os.path.isfile('bbb.txt') #判断是否是一个文件,1.文件要存在,2必须是一个文件
os.path.isdir('e:/rere/rere') #是否是一个路径,目录是否存在
size=os.path.getsize('bbb.txt') #获取文件的大小,不能超过2M
print(size)
os.path.join('root','hehe','mysql','a.sql') #拼接成一个路径
for abs_path,dir,file in os.walk('D:\python自动化\\byz-code\day6'): #递归循环
print(abs_path,dir,file)
#abs_path 当前循环的绝对路径 ,dir目录下面的所有文件夹[], file目录下面的所有文件[]
5)json模块,json串是一个字符串
json.loads() #把json串,变成python的数据类型
f = open('product.json',encoding='utf-8')
json.load(f) #传一个文件,他会帮你读文件
d={
'zhangsan':{'addr':'北京','age':28},
'lisi':{'addr':'上海','age':38}
}
json.dumps(d,ensure_ascii=False,inden=4) #字典转成json,字典转成字符串
json.dump(d,fw,ensure_ascii=False,indent=10) #操作文件
6)sys模块
sys.platfor) #判断操作系统
sys.path #python的环境变量
sys.path.append('../day5') #(..代表上一级目录)把目录加入到环境变量里,再导入模块,就可使用该模块
sys.path.insert(0,r'd:\python自动化\byz-code\day5') #加到环境变量首个文件内
# import my_random #day5目录下的一个ptyhon文件
sys.argv #来获取命令行里面运行python文件 (文件名不要用中文)
=====小练习======
1、写一个生成双色球号码的一个程序,生成的号码写到文件里面
# 中奖号码由6个红色球号码和1个蓝色球号码组成
# 篮球范围:01-16
# 红球范围:01-33
import random,json,string
def select(start,end,num): #生成一组蓝球和红球的函数
a_list=[]
while len(a_list) !=num:
a=random.randint(start,end)
a=str(a).zfill(2) #取出来的数字补齐2位
if a not in a_list:
a_list.append(a)
return a_list
def write(content): #写入文件的函数
with open('ticket.txt', 'w', encoding='utf-8') as f: # 把生成的双色球号码全部写入文件
content_json=json.dumps(content,ensure_ascii=False,indent=4)
f.write(content_json)
def main():
tickets = {}
num=input('请输入双色球投注数量:').strip()
i=1
if num.isdigit():
while len(tickets)!=int(num):
red_ticket=str(select(1,33,6))
blue_ticket=str(select(1,16,1))
if red_ticket not in tickets.values() and blue_ticket not in tickets.values():
tickets[i]={'红球号码':red_ticket,'蓝球号码':blue_ticket,}
i +=1
write(tickets)
else:
print('请输入数字。')
main()
------
2、把双数日期的日志,里面随便写点东西
思路:1.获取log目录下面的所有文件 os.walk
2.根据文件名来判断,是否双数日期,分割字符串,取到日期
3.跟2%==0
4.打开这个文件 open()
import os
for abs_path,dir,file in os.walk(r'D:\python自动化\byz-code\day6\logs'):
#print(file)
for f in file: #file是存放的文件名
day=f.split('.')[0].split('-')[-1] #循环文件名,对文件名进行分割,获取文件名最后日期
#print(day)
if int(day)%2==0:
file_name=os.path.join(abs_path,f) #拼接绝对路径
print(file_name)
open(file_name,'a+',encoding='utf-8').write('aaaaa') #没有给文件赋值,不用关闭文件