• Python 常用模块


     os

    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
    os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
    os.curdir  返回当前目录: ('.')
    os.pardir  获取当前目录的父目录字符串名:('..')
    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.mknod("test.txt")        创建空文件
    os.rename("oldname","newname")  重命名文件/目录
    os.sep    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    os.linesep    输出当前平台使用的行终止符,win下为"	
    ",Linux下为"
    "
    os.pathsep    输出用于分割文件路径的字符串
    os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
    os.system("bash command")  运行shell命令,直接显示
    os.environ  获取系统环境变量
    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)  返回文件大小
    os.path.normcase('/DasdASD/asdasdA/')   跨平台转换路径,转换大写为小写
    os.path.normcase(os.path.join(os.path.dirname(os.path.abspath(__file__)),os.path.pardir))
    os.get_terminal_size()  获取终端大小
    os.chmod('jjj',0700)  权限
    os.chown('jjj',UID,GID)  属主属组
    os.stat('path/filename')  获取文件/目录信息
    f = open('aaa.log')
    f2 = open('bbb.log', 'w')
     shutil.copyfileobj(f, f2, length=3*1024)  # 将文件内容拷贝到另一个文件
    shutil.copyfile('aaa.log', 'bbb.log')  # 同上
    shutil.copymode('aa', 'bb')  # 拷贝权限,内容、用户、组不变
    shutil.copytree(src, dst, ignore=shutil.ignore_patterns('atm'))  # 递归复制目录
    shutil.rmtree('asd')  # 删除目录
    shutil.make_archive("压缩包名", "zip", "要压缩的目录")  # 压缩文件

    time

    t = time.localtime(time.time()-86400)  # 返回本地时间
    print(t.tm_year, t.tm_mon)
    # 时间戳
    time.time()
    
    # 格式化前一天时间
    t = time.localtime(time.time()-86400) 
    time.strftime('%Y/%m/%d %H:%M:%S %W', t)
    
    # 日期字符串转换成时间对象
    time_str = '2019-11-12 11:11:11'
    f = time.strptime(time_str, '%Y-%m-%d %H:%M:%S')
    print(f)
    # time.struct_time(tm_year=2019, tm_mon=11, tm_mday=12, tm_hour=11, tm_min=11, tm_sec=11, tm_wday=1, tm_yday=316, tm_isdst=-1)
    
    # 将时间对象转换成时间戳
    print(time.mktime(f))
    # 将时间戳转为字符串格式
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

    datetime

    import datetime
    print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
    print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 2016-08-19
    print(datetime.datetime.now() )
    print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
    print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
    print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
    print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分
    datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") 时间对象与字符串互转
    datetime.datetime.fromtimestamp(141456567)  时间对象与时间戳互转
    time.mktime(datetime.datetime.now().timetuple())  转换成秒

    random 随机数

    import random
    print ('小于1的随机浮点数:', random.random())
    print ('指定范围内的随机浮点数:', random.uniform(20,30))
    print ('指定范围内的随机整数:', random.randint(1,2))
    print ('按指定步长集合中获取一个随机数', random.randrange(1,10,3))  # 步长
    print (random.randrange(1,10))  # 不包含10
    print('获取指定长度的序列: ', random.sample([1,2,3,4,5],3))  # 返回随机列表

    zip

    接收多个序列作为参数,返回一个元组列表

    x = [1, 2, 3]
    y = [4, 5, 6,444]
    z = [7, 8, 9]
    xyz = zip(x, y, z)
    list(xyz) # [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
    x = [1, 2, 3]
    r = zip(* [x] * 3)
    list(r) # [(1, 1, 1), (2, 2, 2), (3, 3, 3)]

    string 字符串处理

    import string
    print('小写字母: ',string.ascii_lowercase)
    print('大写字母: ', string.ascii_uppercase)
    print('大写和小写字母: ', string.ascii_letters)
    print('数字: ', string.digits)
    print('所有符号: ', string.printable)

    序列化 json与pickle

    • JSON是文本形式的存储,Pickle则是二进制形式(至少常用二进制)
    • JSON是人可读的,Pickle不可读
    • JSON广泛应用于除Python外的其他领域,Pickle是Python独有的。
    • JSON只能dump一些python的内置对象,Pickle可以存储几乎所有对象。
    在我看来,如果偏向应用特别是web应用方面,可以常用JSON格式。如果偏向算法方面,尤其是机器学习,则应该使用cPickle,pylearn2库中保存model就是使用这项技术的

    有如下对象

    data = {
        'id': 1234,
        'credit': 15000,
        'balance': 8000,
        'create_date': '2015-04-04'
    }
    pickle
     
    dumps and loads
    t = pickle.dumps(data)  # data type is obj
    t2 = pickle.loads(t)  # t type is str
    print('t: ', type(t),t)
    print('t2: ', type(t),t2)
    返回:
    t:  <class 'bytes'> b'x80x03}qx00(Xx06x00x00x00creditqx01Mx98:Xx07x00x00x00balanceqx02M@x1fXx0bx00x00x00create_dateqx03X
    x00x00x002015-04-04qx04Xx02x00x00x00idqx05Mxd2x04u.'
    t2:  <class 'bytes'> {'credit': 15000, 'balance': 8000, 'create_date': '2015-04-04', 'id': 1234}
    dump and load
    with open('test', 'wb') as f:
        pickle.dump(data, f)
    # pickle对象(字符串)-->python对象  从文件读取
    with open('test', 'rb') as f:
        ret = pickle.load(f)
        print('pickle.load: ', ret)
    json
    json只支持 str int float set dict list tuple
     dumps and loads
    json_dumps = json.dumps(data)  # 对象-->字符串
    json_loads = json.loads(json_dumps)  # 字符串-->对象
    print('json_dumps ', type(json_dumps),json_dumps)
    print('json_loads ', type(json_loads),json_loads)
    返回:
    json_dumps  <class 'str'> {"create_date": "2015-04-04", "balance": 8000, "credit": 15000, "id": 1234}
    json_loads  <class 'dict'> {'balance': 8000, 'credit': 15000, 'create_date': '2015-04-04', 'id': 1234}

    dump and load

    # 对象-->字符串,保存到文件
    with open('test', 'w') as f:
        json.dump(data, f)
    # 从文件中读取,字符串-->对象,
    with open('test', 'r') as f:
        ret = json.load(f)
        print(ret)  # return:{'credit': 15000, 'id': 1234, 'create_date': '2015-04-04', 'balance': 8000}
     

    PyYAML

    import yaml
    # 反序列化, 从文件中读取数据, 转成字典对象,
    data_dic = yaml.load(open("salt",encoding="utf-8"))
    print(type(data_dic))
    # 序列化, 字段对象转成字符串
    data_bytes = yaml.dump(data_dic,
                default_flow_style=False,  # 风格之类的,以最简单的方式显示就行了
                indent=4,
                encoding='utf-8',   # 设置编码
                allow_unicode=True   # 不是转化成unnicode形式
                )
    with open("rrr","wt", encoding="utf-8") as f:
        f.write(str(data_bytes, encoding="utf-8"))
     

    haslib

    import hashlib
    m = hashlib.md5()
    m.update(b"Hello")
    m.update(b"It's me")
    print(m.digest())
    
    m.update(b"It's been a long time since last time we ...")
    print(m.digest()) #2进制格式hash
    print(len(m.hexdigest())) #16进制格式hash
    
    m = hashlib.md5()
    m.update(bytes('asd',encoding='utf-8'))
    print(m.hexdigest())
     

    struct 数据打包解包

    d=40
    struct.pack('i',b)  # 打包
    b'(x00x00x00'
    s = struct.pack('i',b)
    struct.unpack('i',s)  # 解包
    (40,)
     

    base64

    import base64  
    import StringIO  
    a = "this is a test"
    b = base64.encodestring(a) # 对字符串编码  
    print b  
    print base64.decodestring(b) # 对字符串解码  
    c = StringIO.StringIO()  
    c.write(a)  
    d = StringIO.StringIO()  
    e = StringIO.StringIO()  
    c.seek(0)  
    base64.encode(c, d) # 对StringIO内的数据进行编码  
    print d.getvalue()  
    d.seek(0)  
    base64.decode(d, e) # 对StringIO内的数据进行解码  
    print e.getvalue()  
    a = "this is a +test"
    b = base64.urlsafe_b64encode(a) # 进行url的字符串编码  
    print b  
    print base64.urlsafe_b64decode(b) 
    上面的encode函数和decode函数的参数也可以是文件对象:
    f1 = open('aaa.txt', 'r')  
    f2 = open('bbb.txt', 'w')  
    base64.encode(f1, f2)  
    f1.close()  
    f2.close() 
     

    sched

    定时任务

    import time, os, sched
    schedule = sched.scheduler(time.time, time.sleep)
    #schedule.enter(延迟, 优先级, 回调函数, (参数1, 参数2))
    def perform_command(cmd, inc):
        # 安排inc秒后再次运行自己,即周期运行
        schedule.enter(inc, 0, perform_command, (cmd, inc))  
        os.system(cmd)
    def timming_exe(cmd, inc=60):
        # enter用来安排某事件的发生时间,从现在起第 10 秒开始启动
        schedule.enter(10, 0, perform_command, (cmd, inc))
        # 持续运行,直到计划时间队列变成空为止
        schedule.run()
    print("show time after 10 seconds:")
    timming_exe("echo %time%", 2)
     
  • 相关阅读:
    c#多线程
    把.NET程序部署到没有安装.NET Framwork的机器上
    Java字符编码转换过程说明
    Window 消息大全使用详解
    Regsvr32
    VC++的应用程序框架中各类之间的访问方法
    java接收中文输入并正常显示
    Visual C#中的数据绑定
    截取系统 API 调用(转)
    几个操作文件的API函数
  • 原文地址:https://www.cnblogs.com/hanqian/p/7677762.html
Copyright © 2020-2023  润新知