一、os
import os #对操作系统的一些操作 print(os.getcwd())#取当前工作目录 os.chmod('/usr/local',7)#给linux文件/目录加权限,对windows下不好使,1执行 2写 4读 os.chdir('../')#更改当前目录(回到上一级目录),没有返回值 print(os.curdir)#当前目录, . print(os.pardir)#父目录, .. os.makedirs('aa/bb')#递归创建文件夹,父目录不存在时创建,文件夹已存在时,无法创建 os.mkdir('cc')#创建文件夹,文件夹已存在时,无法创建 os.removedirs('aa/bb')#递归删除空目录 os.rmdir('cc')#删除指定的空文件夹 os.remove('temp.py')#删除文件 print(os.listdir())#列出当前目录下的所有文件及文件夹 print(os.listdir('d:/'))#列出d盘的所有文件 os.rename('test','test1')#重命名 print(os.stat('tmp.py'))#获取文件信息 print(os.sep)#当前操作系统的路径分隔符,win:\,linux:/ # day5+os.sep+tmp.py 用os.sep拼接路径,提高系统兼容性 print(os.linesep)#当前操作系统的换行符, print(os.pathsep)#当前系统的环境变量中每个路径的分隔符,linux是:,windows是; print(os.environ)#当前系统的环境变量 print(os.name)#当前系统名称,Windows系统都是nt linux都是posix,用来判断当前是什么系统 print(os.system('dir'))#执行操作系统命令的,查看当前目录下有什么内容dir,用来执行linux下备份 res = os.system('dir')#不能获取到命令执行结果,返回0代表命令执行成功,用来创建文件夹等不需要返回结果的命令 res = os.popen('ifconfig').read()#可以获取到命令执行的结果 os.open('top').read() #无法执行,因为top命令执行结果一直在动态变化 os.popen('top -n 1').read() #只取一次,可以获得结果 print(os.path.abspath('.'))#获取绝对路径 print(__file__) # 获取到当前文件的绝对路径,但路径分隔符不对 print(os.path.abspath(__file__))# 获取到当前文件的绝对路径 print(os.path.split('/usr/hehe/hehe.txt'))#分割路径和文件名,取list[1]就直接可以取出文件名 print(os.path.dirname('d:\work'))#获取父目录,获取它的上一级目录,d: print(os.path.basename('d:\work'))#获取最后一级,如果是文件显示文件名,如果是目录显示目录名,work print(os.path.exists('d:\work'))#目录/文件是否存在,True print(os.path.isabs('d:\work'))#判断是否是绝对路径,True print(os.path.isfile('tmp.py'))#判断是否是一个文件,1、文件要存在2、必须是一个文件 print(os.path.isdir('d:\work'))#是否是一个路径,目录是否存在,True print(os.path.getsize('tmp.py'))#获取文件的大小,返回的是字节,可以用来限制文件上传大小 print(os.path.join('root','db','a.sql'))#拼接成一个路径,,分隔符会自动识别,与os.sep的一致更智能,rootdba.sql print(os.path.getatime('tmp.py'))#输出最近访问时间 print(os.path.getmtime('tmp.py'))#输出最近访问时间
os.walk是一个非常强大的方法,可以将文件夹下的子文件夹里的文件遍历出来
os.walk返回的是一个二维数组,数组每个元素都包含绝对路径、文件夹、文件三个元素,可以用三个变量来循环
for data in os.walk(r'd:workspacepythonsyz-dongruiDay6'): print(data) for abs_path,dir,file in os.walk(r'd:workspacepythonsyz-dongruiDay6'):#获取目录下内容 # 路径前面加个r,不会把/n等转义 # os.listdir()列出当前目录下的所有文件,os.walk会遍历子文件夹找到所有文件 print(abs_path,dir,file) # abs_path 当前循环的绝对路径 # dir 目录下面所有的文件夹 [ ] # file 目录下面的所有文件 []
小练习:
在log文件夹下批量新增子文件夹及文件
import os,datetime dirs = ['android','apache','app','ios','nginx','python','tomcat'] os.chdir(r'D:workspacepythonsyz-dongruiDay6logs') base_path = r'D:workspacepythonsyz-dongruiDay6logs' for d in dirs: path = os.path.join(base_path,d) os.mkdir(path) os.chdir(path) for i in range(10): t = datetime.date.today()-datetime.timedelta(days=i) filename = '%s-%s.log'%(d,t) open(filename,'w')
把双数日期的日志,里面随便写点东西
import os for abs_path,dir,file in os.walk('D:workspacepythonsyz-dongruiDay6logs'): #获取到log目录下面的所有文件 for f in file: day = f.split('.')[0].split('-')[-1]#取出文件的日期 if int(day)%2==0: filename = os.path.join(abs_path,f)#拼接绝对路径 open(filename,'a+',encoding='utf-8').write('写入双数日期日志')
二、sys
import sys print(sys.platform) #判断操作系统,win32 print(sys.path) #python的环境变量 sys.path.append('../day5_函数')#添加环境变量 sys.path.insert(0,r'../day5_函数') #比append效率高,可以不去找其他环境变量了 print(sys.argv) #用来获取命令行里面运行python文件的时候传入的参数 # 它是一个list,list默认就有一个元素,就是当前的这个文件名 sys.exit(n) #退出程序,正常退出时exit(0) print(sys.version) #获取Python解释程序的版本信息 sys.stdout.write('please:')#向屏幕输出一句话 val = sys.stdin.readline()[:-1]#获取输入的值
下面写个小工具tools.py来说明sys.argv的作用
(1) 用来获取命令行里面运行python文件的时候传入的参数
(2) 它是一个list
(3) 这个list默认就有一个参数,就是当前的这个文件名
import sys command = sys.argv print(command) #['tools.py', '--help'] if len(command) > 1: cmd1 = command[1] if cmd1 == '--help': print('这个是帮助文档' '这个python文件是用来说明sys.argv的作用') elif cmd1 == 'os': print('当前的操作系统是%s'%sys.platform) else: print('运行python的时候要传入一个参数' 'e.g python xx.py install')
在当前目录下运行命令行,或者在pycharm中打开Terminal
输入python tools.py --help,即打印“这个是帮助文档这个python文件是用来说明sys.argv的作用”
三、random
import random print(random.randint(1,10))#随机取整数 print(random.randrange(1,20))#随机产生一个range print(random.random())#随机浮点数,默认取0-1,不能指定范围 print(random.uniform(1,3))#随机小数,可以指定范围 print(round(random.uniform(1,99),2))#随机小数,保留小数点后两位 print(random.choice([1,2,3]))#随机取1个元素 print(random.sample('hello',3))#随机取N个元素,返回的是list pickts = ['A','J','Q','K',2,3,4,5,6] random.shuffle(pickts)#洗牌只能传list print(pickts)#['Q', 'A', 2, 6, 3, 4, 5, 'K', 'J']
四、string
import string print(string.ascii_letters)#所有大小写字母 print(string.ascii_lowercase)#所有小写字母 print(string.ascii_uppercase)#所有大写字母 print(string.digits)#所有数字 print(string.punctuation)#所有特殊标点符号 print(string.printable)#数字+字母+特殊字符
五、time & datetime
1、time
时间有三种表示方式,一种是时间戳、一种是格式化时间、一种是时间元组
import time print(time.timezone)#和标准时间相差的时间,单位是s,东八区-28800 print(time.time())#获取当前时间戳 time.sleep(10) #休息10s print(time.gmtime())#把时间戳转换成时间元组,如果不传的话,默认取标准时区的时间戳,东八区tm_hour需要+8 print(time.localtime())#把时间戳转换成时间元组,如果不传的话,默认取当前时区的时间戳 print(time.strftime('%Y-%m-%d %H:%M:%S'))#将时间元组转换成格式化输出的字符串,默认输出当前时间 # strftime后面两个参数,第一个是输出格式,第二个是时间元组,第二个不填就为当前时间 print(time.strptime('2018-04-21','%Y-%m-%d'))#把格式化好的时间转成时间元组 print(time.mktime(time.localtime()))#把时间元组转换成时间戳 time.struct_time#时间元组 print(time.asctime())#时间元转换成格式化时间 print(time.ctime())#时间戳转换成格式化时间
时间戳与格式化好的时间可以通过时间元组来转换
(1) 时间戳->时间元组->格式化的时间
import time def timestamp2format(timestamp = None,format='%Y-%m-%d %H:%M:%S'): if timestamp:#若传入时间戳,把时间戳转化成格式化好的时间,返回 time_tuple = time.localtime(timestamp)#将时间戳转换为时间元组 res = time.strftime(format,time_tuple)#将时间元组格式化输出 else: res = time.strftime(format) #默认返回当前格式化好的时间 return res print(timestamp2format())#2018-04-28 18:17:17 print(timestamp2format(1524828157,'%Y-%m-%d'))#2018-04-27
(2) 格式化的时间->时间元组->时间戳
import time def format2timestamp(str= None,format = '%Y-%m-%d'): if str:#若传入格式化时间,把格式化时间转为时间戳,返回 time_tuple = time.strptime(str,format)#把格式化时间转为时间元组 res = time.mktime(time_tuple)#将时间元组转化为时间戳 else: res = time.time()#默认返回当前时间戳 return int(res) print(format2timestamp())#1524910637 print(format2timestamp('2018-4-29',))#1524931200
2、datetime
import datetime print(datetime.datetime.today())#获取当前时间,精确到秒 print(datetime.date.today())#精确到天 print(datetime.datetime.now())#当然时间格式化输出 res = datetime.date.today() - datetime.timedelta(days=5)#5天前的时间 res1 = datetime.datetime.today()-datetime.timedelta(days=5,minutes=-5,seconds=3,weeks=2) print(res) print(res1.strftime('%Y-%m-%d'))
六、hashlib
hashlib模块,主要用于加密相关的操作,在python3的版本里,代替了md5和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
import hashlib m = hashlib.md5()#实例化md5对象,bytes m.update('hello'.encode())#不能直接对字符串加密,要先把字符串转成bytes类型 print(m.hexdigest())#md5加密是不可逆,16进制格式hash print(m.digest())#2进制格式hash hash = hashlib.sha1() hash = hashlib.sha256() hash = hashlib.sha384() hash = hashlib.sha512() hash.update(b'hello') print(hash.digest)
七、json(详见学习笔记九)
import json dic = {"name":"Amy","age":18} print(json.dumps(dic))#把字典转成json串,需要额外写文件 fj = open('a.json','w') print(json.dump(dic,fj))#把字典转换成的json串写到一个文件里面 s_json = '{"name":"Amy","age":20,"status":true}' print(json.loads(s_json))#把json串转换成字典,需要先读文件 fr = open('b.json','r') print(json.load(fr))#从文件中读取json数据,然后转成字典