zoukankan      html  css  js  c++  java
  • python基础学习-常用模块的使用(扩展补充,高级使用)(一)

    一、os模块

    1、常见命令

    import 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.rename("oldname","newname")  重命名文件/目录
    os.stat('path/filename')  获取文件/目录信息
    os.sep    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    os.linesep    输出当前平台使用的行终止符,win下为"	
    ",Linux下为"
    "
    os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
    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) 返回path的大小

    os.listdir 获取某一个文件夹下的子文件和文件名

    import os
    ​
    print(os.listdir(r'D:python oldboyday22'))     # 获取该文件夹下的文件名
    print(os.listdir(r'.'))                                         # 获取当前文件夹下的文件名

    os.path.getsize 查看文件大小

    import os
    ​
    res = os.path.getsize(r'D:python oldboyday22常用模块的使用
    un.py')
    print(res)
    os.system('dir D:python oldboy')     # 打印文件夹下的文件信息
    os.rename('old_name', 'new_name')       # 重命名文件夹/目录

    二、time模块

    1、time 时间模块 时间分为三种格式: 1.时间戳:从1970年到现在 经过的秒数 作用:用于时间间隔的运算

    import time
    ​
    print(time.time())  # 1585530575.6760194
    print(time.time() + 86400*3)

    2.按照某种格式显示的时间:2020-03-30 11:11:11 作用:用于展示时间

    import time
    ​
    print(time.strftime('%Y-%m-%d %X'))  # 2020-03-30 09:09:35
    print(time.strftime('%Y-%m-%d %H:%M:%S'))  # 2020-03-30 09:09:35
    print(time.strftime('%Y-%m-%d %H:%M:%S %p'))  # 2020-03-30 09:09:35 AM

    3.结构化时间 作用:用于单独获取时间的某一部分

    import time
     #--------------------------我们先以当前时间为准,让大家快速认识三种形式的时间
     print(time.time()) # 时间戳:1487130156.419527
     print(time.strftime("%Y-%m-%d %X")) #格式化的时间字符串:'2017-02-15 11:40:53'
    print(time.localtime()) #本地时区的struct_time
     print(time.gmtime())    #UTC时区的struct_time

    2、datetime

    import datetime
    ​
    print(datetime.datetime.now())  # 显示当前时间:2020-03-30 09:25:13.923937
    print(datetime.datetime.now() + datetime.timedelta(days=3)) # 计算3天后的时间:2020-04-02 09:25:13.923937
    print(datetime.datetime.now() + datetime.timedelta(weeks=1)) # 计算1周后的时间:2020-04-06 09:26:35.199914

    三、random模块

    1、基础

    import random
    ​
    print(random.random())                         # (1,3)--float 大于0 小于1 的小数
    print(random.randint(1,3))                      # [1,3] 开区间 大于等于1 小于等于3 的整数
    print(random.randrange(1,3))                    # [1,3) 大于等于1 小于3 的整数
    print(random.choice([1,'a',[4,5]]))             # 1 或者 ‘a’ 或者 [4,5]
    print(random.sample([111,'aaa','ccc','ddd'],2)) # 列表元素 任意2个组合
    print(random.uniform(1,3))                      # 大于1 小于3 的小树
    item = [1,3,5,7,9]
    random.shuffle(item)    # 打乱item的顺序,相当于 “洗牌”
    print(item)

    四、sys模块

    import sys 
    ​
     sys.argv           命令行参数List,第一个元素是程序本身路径
     sys.exit(n)        退出程序,正常退出时exit(0)
     sys.version        获取Python解释程序的版本信息
     sys.maxint         最大的Int值
     sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
     sys.platform       返回操作系统平台名称 

    五、shutil模块

    高级的 文件、文件夹、压缩包 处理模块

    shutil.copyfileobj(fsrc, fdst[, length]) #将文件内容拷贝到另一个文件中
    
     import shutil
      
     shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))
    shutil.copyfile(src, dst)# 拷贝文件
    
     shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在
    shutil.copymode(src, dst) #仅拷贝权限。内容、组、用户均不变
    
     shutil.copymode('f1.log', 'f2.log') #目标文件必须存在
    shutil.copystat(src, dst) #仅拷贝状态的信息,包括:mode bits, atime, mtime, flags
    
     shutil.copystat('f1.log', 'f2.log') #目标文件必须存在
    shutil.copy(src, dst) #拷贝文件和权限
    
     import shutil
      
     shutil.copy('f1.log', 'f2.log')
    shutil.copy2(src, dst) #拷贝文件和状态信息
    
     import shutil
      
     shutil.copy2('f1.log', 'f2.log')
    shutil.ignore_patterns(*patterns) shutil.copytree(src, dst, symlinks=False, ignore=None) #递归的去拷贝文件夹
    
     import shutil
      
     shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目标目录不能存在,
    注意对folder2目录父级目录要有可写权限,ignore的意思是排除
    shutil.rmtree(path[, ignore_errors[, onerror]]) #递归的去删除文件 import shutil shutil.rmtree('folder1') shutil.move(src, dst) #递归的去移动文件,它类似mv命令,其实就是重命名。 import shutil shutil.move('folder1', 'folder3') shutil.make_archive(base_name, format,...)

    创建压缩包并返回文件路径,例如:zip、tar

    创建压缩包并返回文件路径,例如:zip、tar

    • base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径, 如 data_bak =>保存至当前路径 如:/tmp/data_bak =>保存至/tmp/

    • format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”

    • root_dir: 要压缩的文件夹路径(默认当前目录)

    • owner: 用户,默认当前用户

    • group: 组,默认当前组

    • logger: 用于记录日志,通常是logging.Logger对象

    六、以上功能案例:

    6.1、文件路径

    规定起始目录
    # 推荐使用这种
     BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    #文件目录拼接
     os.path.join(BASE_DIR,‘db.txt’)
    print(os.path.isfile(r'test.py'))           # 判断是否是文件:True
    print(os.path.isfile(r'aaa'))               # 判断是否是文件:False

    6.2、需要掌握:format string <==> time stamp

    # '1998-09-30 11:11:11' + 7
    format string ==> struct_time ==> timestamp
    
    import time
    import datetime
    ​
    struct_time = time.strftime('1998-03-03 11:11:11', '%Y-%m-%d %H:%M:%S')
    timestamp = time.mktime(struct_time) + 7*86400
    print(timestamp)
    timestamp ==> struct_time ==> format string
    
    import time
    import datetime
    ​
    res = time.strftime('%Y-%m-%d %X',time.localtime(timestamp))
    print(res)

    6.3、时间格式的转换

    struct_time ==> 时间戳
    
    import time
    s_time = time.localtime()
    print(time.mktime(s_time))  # 1585532088.0
    时间戳 ==> struct_time
    
    import time
    import datetime
    ​
    tp_time = time.time()
    print(time.localtime(tp_time))  # time.struct_time(tm_year=2020, tm_mon=3, tm_mday=30, tm_hour=9, 
    tm_min=34, tm_sec=48, tm_wday=0, tm_yday=90, tm_isdst=0)
    import time import datetime ​ print(time.localtime()) # 上海时区(东八区) print(time.gmtime()) # 世界标准时间 print(time.localtime(333333)) # 时间戳,输入几秒,北京时间 print(time.gmtime(333333)) # 时间戳,输入几秒,世界标准时间

    6.4、random应用:随机验证码

    思路:
    import random
    res = ''
    for i in range(6):
      随机字符 = random.choice([从26个小写字母中随机抽取出一个,从10个数字中随机取出一个])
      从26个字母中随机抽取出一个 = chr(random.randint(65,90))
      从10个数字中随机取出一个 = str(random.randint(0,9))

      随机字符 = random.choice([从26个字母中随机抽取出一个,从10个数字中随机取出一个])
      res += 随机字符

    实现代码:

    1.普通版:4位(大写字母+数字)

    def make_code(size=4):  # 默认长度为4
        import random
        res = ''
        for i in range(size):
            s1 = chr(random.randint(65,90))     # ASCII码表中,65-90是A-Z
            s2 = str(random.randint(0,9))       # 随机整数0-9
    ​
            res += random.choice([s1,s2])
        return res
    ​
    print(make_code())

    2.升级版:6位(+小写字母+大写字母+数字)

    def make_code_plus(size=6):  # 默认长度为6
        import random
        res = ''
        for i in range(size):
            s1 = chr(random.randint(65,90))     # ASCII码表中,65-90是A-Z
            s2 = chr(random.randint(97,122))     # ASCII码表中,97-122是a-z
            s3 = str(random.randint(0,9))       # 随机整数0-9
    ​
            res += random.choice([s1,s2,s3])
        return res
    ​
    print(make_code_plus())

    6.5、文件拷贝的原始方法

    src_file = input('原文件路径:').strip()
    dst_file = input('新文件路径:').strip()
    ​
    with open(r'%s'%src_file, mode='rb') as read_f,
        open(r'%s'%dst_file, mode='wb') as write_f:
        for line in read_f:
            write_f.write(line)

    6.6、文件拷贝的新方法

    src_file = sys.argv[1]
    dst_file = sys.argv[2]
    ​
    with open(r'%s'%src_file, mode='rb') as read_f,
        open(r'%s'%dst_file, mode='wb') as write_f:
        for line in read_f:
            write_f.write(line)
    # 在run.py所在的文件夹下,按住shift,右键,选择“在此处打开power shell”,输入
    # 格式:python3 run.py 原文件路径 新文件路径
    # python3 run.py D:1.docx D:2.docx   #拷贝成功

    6.7、进阶打印进度条

    import time
    ​
    def progress(percent):
        if percent > 1:
            percent = 1
        res = int(50 * percent) * '>'
        print('
     [%-50s] %d%%' % (res,percent*100), end='')
    ​
    recv_size = 0
    total_size = 25600while recv_size < total_size:
        # 模拟网速
        time.sleep(0.2)
         # 下载了1024个字节的数据
        recv_size += 1024
        percent = recv_size / total_size    # 1024 / 25600
        # 打印进度条
        progress(percent)
     
  • 相关阅读:
    Java 内部类
    Java 包 和导入
    Java 访问控制权限
    java 面向对象-- this 关键字
    java 面向对象-- 构造方法
    java 用递归函数实现斐波那契数列 1、1、2、3、5、8、13、21
    Java面向对象-static静态方法与普通方法
    常用模块(time)
    模块安装及导入
    python之OS模块详解
  • 原文地址:https://www.cnblogs.com/dingbei/p/12602169.html
Copyright © 2011-2022 走看看