Python学习笔记十二_常用模块

一、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数据,然后转成字典
原文地址:https://www.cnblogs.com/dongrui624/p/8950522.html