zoukankan      html  css  js  c++  java
  • 你常用的模块?

    你常用的模块?

    复制代码
    re模块
    ret = re.findall('a', 'eva egon yuan')  # 返回所有满足匹配条件的结果,放在列表里,左边为正则表达式,右边为要匹配的字符串
    print(ret)  # 结果 : ['a', 'a']
    
    ret = re.search('a', 'eva egon yuan').group()
    print(ret)  # 结果 : 'a'
    # search从左到右依次找,找到一个就回来,需要使用group()获取返回值
    # 如果re.search找不到,就返回None,使用group会报错
    
    ret = re.match('a', 'abc').group()
    print(ret)
    # match从头开始配置,匹配上了需要使用group()来获取返回值
    # 匹配不上返回None,使用group会报错
    
    
     json模块
    json.dumps(dic)  # 序列化:将一个字典转换成一个字符串
    json.loads(str_dic)  # 反序列化:将一个字符串格式的字典转换成一个字典
    
    
    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.popen("bash command)  运行shell命令,获取执行结果
    os.environ  获取系统环境变量
    
    os.path
    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的大小
    
    
    sys模块
    sys模块是与python解释器交互的一个接口
    
    sys.argv 命令行参数List,第一个元素是程序本身路径
    sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)
    sys.version 获取Python解释程序的版本信息
    sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    sys.platform 返回操作系统平台名称
    复制代码

    正则贪婪匹配

    默认情况下是贪婪的,如果想要非贪婪使用?

    .*? 非贪婪匹配
    .*?t 遇到一个t马上停,经典用法

    给你路径 "E:mac苹果系统工具"? 提示:os

    os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

    复制代码
    # 方法一:(面试要求不使用os.walk)
    def print_directory_contents(sPath):
        import os
    
        for sChild in os.listdir(sPath):
            sChildPath = os.path.join(sPath, sChild)
            if os.path.isdir(sChildPath):
                print_directory_contents(sChildPath)
            else:
                print(sChildPath)
                
    # 方法二:(使用os.walk)
    def print_directory_contents(sPath):
        import os
        for root, _, filenames in os.walk(sPath):
            for filename in filenames:
                print(os.path.abspath(os.path.join(root, filename)))
    
    
    print_directory_contents('.')
    复制代码

    创建、删除文件

    open('xxx', 'w')
    os.remove()  删除一个文件

    第三方软件安装

    - pip包管理器
    - 源码安装
        - 下载
        - 解压 
        - python setup.py build
        - python setup.py install

    OSI 7层/5层/4层协议

    三次握手、四次挥手

    TCP和UDP

    进程、线程、协程区别

    复制代码
    # 进程
    一个任务,进程之间内存隔离,一个进程修改数据不会影响其他进程(创建变量,修改变量值)
    # 线程
    线程位于进程内
    一个进程内至少有一个线程,线程之间资源共享.一个线程修改数据其他进程也会受影响
    所以有了锁的概念
    # 协程
    单线程下实现并发(提高效率)
    
    并发的本质是切换+保存状态
    python的yield+send
    yield # 保存状态
    send # 向生成器传递参数
    复制代码

    GIL锁

    在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多核优势

    首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,所以这里要先明确一点:GIL并不是Python的特性,Python完全可以不依赖于GIL

    GIL本质就是一把互斥锁,既然是互斥锁,所有互斥锁的本质都一样,都是将并发运行变成串行,以此来控制同一时间内共享数据只能被一个任务所修改,进而保证数据安全。

    可以肯定的一点是:保护不同的数据的安全,就应该加不同的锁。

    每一个cpython进程内都有一个GIL
    GIL导致同一进程内的多个线程同一时间只能有一个运行
    之所以有GIL,是因为cpython的内存管理不是线程安全的

    进程池和线程池

    在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间。多进程是实现并发的手段之一,需要注意的问题是:

    1. 很明显需要并发执行的任务通常要远大于核数
    2. 一个操作系统不可能无限开启进程,通常有几个核就开几个进程
    3. 进程开启过多,效率反而会下降(开启进程是需要占用系统资源的,而且开启多余核数目的进程也无法做到并行)

    例如当被操作对象数目不大时,可以直接利用multiprocessing中的Process动态成生多个进程,十几个还好,但如果是上百个,上千个。。。手动的去限制进程数量却又太过繁琐,此时可以发挥进程池的功效。

    我们就可以通过维护一个进程池来控制进程数目,比如httpd的进程模式,规定最小进程数和最大进程数

  • 相关阅读:
    大道至简读后感(第二章)
    大道至简读后感
    将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档
    python之基础
    python之面向对象
    python之网络编程
    python之函数
    Managing SharePoint 2010 Farm Solutions with Windows PowerShell
    Oracle RMAN vs. Export?
    转帖在oracle中自动大批量生成测试数据
  • 原文地址:https://www.cnblogs.com/xyhh/p/10861043.html
Copyright © 2011-2022 走看看