zoukankan      html  css  js  c++  java
  • python笔记6 模块与包 程序开发规范 包 re sys time os模块

    模块与包

    python 模块首引用加载到内存,如果再次引用此模块,直接从内存中读取. 

    python文件分为:执行文件(解释器运行的文件),被引用文件(import)

    模块引用一共发生了3件事:

    1.他在内存中开辟了以模块名命名的内存空间

    2.你模块文件的所有内容都加载到了内存.

    3.通过模块名.的方式去引用模块中的对象

    为模块起别名:

    1,将模块名较长的改为较短的,便于操作

    import time as tm
    tm.time()

    2.拓展代码

    from .... import ....   方式引用    #好处:使用方便  缺点:可能与执行稳健的变量名产生冲突  所以不太推荐使用

    from time import time               #从from模块引用time()函数
    print(time())                         #这样引用可以直接使用time函数,前边不用加time.
    
    1546415379.0057561

    改名

    from time import time as tm  
    print(tm())
    
    1546415633.2531772

     __name__ 

    __name__被当做执行文件执行时__name__ 为__main__ ,被引用时 __name__为模块名

    执行模块wk

    name = 'wk'
    def read1():
        print('tbjx模型', name)
    def read2():
        print('嘻嘻')
        read1()
    print(__name__)
    
    __main__

    在其他文件引用模块wk

    import wk
    
    wk

    __name__用于调试模块

    name = 'wk'
    
    
    def read1():
        print('tbjx模型', name)
    
    
    def read2():
        print('嘻嘻')
        read1()
    
    
    print(__name__)
    if __name__ == '__main__':    #如果说执行的是本文件,__name__就是__main__ ,判断后就能调用函数,如果是import调用的__name__就是函数名,不会调用函数
        read2()

    模块的引用顺序

    1.先从内存中找

    2.内置模块(os,time,sys..)

    3.sys.path

    程序开发规范

     包

    创建一个包里边直接有__init__文件

    asd文件里的内容

    x = 1

    引用aaa包里的asd文件

    from aaa import asd
    print(asd.x)
    
    1

    引用aaa包直接执行__init__内的内容

    from aaa import asd
    print(asd.x)
    
    321
    1

    引用aaa包内的bbb包

    bbb的__init__文件

    xx = 32

    aaa的__init__文件

    from aaa import bbb

    aaa同级文件引用aaa里的bbb

    import aaa
    print(aaa.bbb.xx)
    
    32

    引用bbb里的ddd文件

    ddd文件

    def fun1():
        print('bbb里的ddd')

    bbb的__init__文件

    from aaa.bbb import ddd

    aaa的__init__文件

    from aaa import bbb

    aaa同级的python调用文件

    import aaa
    aaa.bbb.ddd.fun1()
    
    bbb里的ddd

    总结:

    执行文件的当前目录是在sys.path的第一个参数

    所以当前目录的文件可以直接improt

    无论怎样导入文件import还是from...import.... 一定是从执行文件当前目录开始

    模块的分发

    在aa包下有asd 和qwe两个文件4个函数qq ww aa xx

    asd文件

    def xx():
        print(1)
    def aa():
        print(2)

    qwe

    def qq():
        print(3)
    def ww():
        print(4)

    aaa下的__init__文件

    from aaa.asd import aa        #在aaa里的asd文件调用aa函数  .只能用在前不能用在import之后
    from aaa.asd import xx        
    from .qwe import ww            #.就是当前路径 当前目录下的qwe文件  ..是上级目录和linux一样  
    from .qwe import qq

    aaa的同级调用文件

    import aaa       #在不改变原调用方法的情况下 将相同功能的模块分开为不同的文件
    aaa.ww()
    aaa.qq()
    aaa.aa()
    aaa.xx()

    4
    3
    2
    1

     re模块

    re模块的操作方法:

    findall 找全部    

    search 找到即返回 

    match 匹配开始

    split   按照不同分隔符进行分割

    sub  替换

    finditer返回一个存放匹配结果的迭代器

    单个匹配

    w匹配字母(包含中文)或数字或下划线

    import re
    ss = 'aasdsadaqw'
    print(re.findall('w',ss))              #一个w代表一个字符
    print(re.findall('ww',ss))
    print(re.findall('www',ss))
    
    ['a', 'a', 's', 'd', 's', 'a', 'd', 'a', 'q', 'w']
    ['aa', 'sd', 'sa', 'da', 'qw']
    ['aas', 'dsa', 'daq']

    W匹配非字母(包含中文)或数字或下划线

    import re
    ss = 'aa  sds* d#a q!w'
    print(re.findall('W',ss))
    print(re.findall('WW',ss))
    print(re.findall('WWW',ss)) 
    
    [' ', ' ', '*', ' ', '#', ' ', '!']
    ['  ', '* ']
    []                   #没有3个连在一起的

    s匹配任意的空白符

    import re
    ss = 'aa  sds* d#a q!w'
    print(re.findall('s',ss))
    [' ', ' ', ' ', ' ']

    S匹配任意的非空白符

    import re
    ss = 'aa  sds* d#a q!w'
    print(re.findall('S',ss))
    
    ['a', 'a', 's', 'd', 's', '*', 'd', '#', 'a', 'q', '!', 'w']

    d 匹配数字

    import re
    ss = 'a4a  s132* d#a 1!w'
    print(re.findall('d',ss))
    
    ['4', '1', '3', '2', '1']

    D匹配非数字

    import re
    ss = 'a4a  s132* d#a 1!w'
    print(re.findall('D',ss))
    
    ['a', 'a', ' ', ' ', 's', '*', ' ', 'd', '#', 'a', ' ', '!', 'w']

    A从字符串开头匹配,只匹配开头 匹配结尾

    import re
    ss = 'a4a  s132* d#a 1!w'
    print(re.findall(r'Aa',ss))          #匹配开头字母,如果开头不是所匹配的返回结果为空
    
    ['a']
    import re
    ss = 'a4a  s132* d#a 1!w'
    print(re.findall(r'As',ss))
    
    []

    ^和A一样

    import re
    ss = 'a4a  s132* d#a 1!w'
    print(re.findall(r'^a',ss))
    
    ['a']

    z匹配字符串的结束,如果是换行,只匹配到换行前的结果

    匹配字符串的结束

    import re
    ss = 'a4a  s132* d#a 1!w
     132131'
    print(re.findall(r'131',ss))
    
    ['131']

    $匹配以什么结尾

    import re
    ss = 'a4a  s132* d	#a 1!w
     132131'
    print(re.findall(r'131$',ss))
    
    ['131']

    匹配一个换行符

    import re
    ss = 'a4a  s132* d#a 1!w
     132131'
    print(re.findall(r'
    ',ss))
    
    ['
    ']

    匹配一个制表符

    import re
    ss = 'a4a  s132* d	#a 1!w
     13213	1' 
    print(re.findall(r'	',ss))
    
    ['	', '	']

    重复匹配

    .点代表匹配任意一单个字符,匹配换行符需要加re.DOTALL

    import re
    ss = 'a2b awb aeqeb aqbada a*b'
    print(re.findall('a.b',ss))         #a.b取出以a开头b结尾的3个字符,只能是3个
    
    ['a2b', 'awb', 'aqb', 'a*b']
    import re
    ss = 'a2b awb aeqeb aqbada a*b a
    b'
    print(re.findall('a.b',ss,re.DOTALL))   #可匹配换行符
    
    ['a2b', 'awb', 'aqb', 'a*b', 'a
    b']

    ?问好匹配0个或者1个由左边字符定义的片段

    import re
    ss = 'abb aab aeqeb aqbada a*b a
    b'
    print(re.findall('a?b',ss))   #?匹配左边的0个或1个a 右边是b 期结果为 两种匹配一个为 ab 匹配0个为 b 
    
    ['ab', 'b', 'ab', 'b', 'b', 'b', 'b']

     *匹配0到多个左边的字符

    import re
    ss = 'abb aab aeqeb aqbada a*b aaaaaab'
    print(re.findall('a*b',ss))
    
    ['ab', 'b', 'aab', 'b', 'b', 'b', 'aaaaaab']

    .*匹配任意所有字符

    import re
    ss = 'abb aab aeqeb aqbada a*b aaaaaab'
    print(re.findall('a.*b',ss))
    
    ['abb aab aeqeb aqbada a*b aaaaaab']

    .*? 带限制的匹配 .*匹配任意 ?做限制,匹配到即停止

    import re
    ss = 'abb aab aeqeb aqbada a*b aabaab'
    print(re.findall('a.*b',ss))
    
    ['ab', 'aab', 'aeqeb', 'aqb', 'ada a*b', 'aab', 'aab']

    +匹配一个或多个左边的字符

    import re
    ss = 'abb aab aeqeb aqbada a*b aabaab'
    print(re.findall('a+b',ss))
    
    ['ab', 'aab', 'aab', 'aab']

    {x,y} 匹配x到y个左边字符

    import re
    ss = 'abb aab aeqeb aqbada a*b aaaaab'
    print(re.findall('a{1,3}b',ss))
    
    ['ab', 'aab', 'aaab']

    [ ]代表一个字符

    import re
    ss = 'asd awd acvd awwd acd'
    print(re.findall('a[swc]d',ss))
    
    ['asd', 'awd', 'acd']
    import re
    ss = 'asd awd acvd awwd acd'
    print(re.findall('a[swc][swc]d',ss))
    
    ['awwd']
    import re
    ss = 'asd awd acvd awwd acd'
    print(re.findall('a[a-z]d',ss))             #[]中间可以写范围A-Z a-z 0-9
    
    ['asd', 'awd', 'acd']
    import re
    ss = 'a-d a/d acvd awwd a*d'
    print(re.findall('a[-/*]d',ss))      #匹配- 不能把-放中间
    
    ['a-d', 'a/d', 'a*d']
    import re
    ss = 'a1d a2d acvd awwd a*d'
    print(re.findall('a[^0-9]d',ss))           #^取反
    
    ['a*d']

    ()分组 相当于sed的反向引用

    import re
    ss = 'asdwk cxdfwk adawk 232wk'
    print(re.findall('(.*?)wk',ss))
    
    ['asd', ' cxdf', ' ada', ' 232']
    import re
    ss = 'asdwk cxdfwk adawk 232wk'
    print(re.findall('(sd|df|ds|da)',ss))
    
    ['sd', 'df', 'da']
    import re
    ss = 'asdwk cxdfwk adawk 232wk'
    print(re.findall('(cxdf|ada)wk',ss))
    ['cxdf', 'ada']
    
    import re
    ss = 'asdwk cxdfwk adawk 232wk'
    print(re.findall('(?:cxdf|ada)wk',ss))   #  ?: 取匹配到的分组的所有字符
    ['cxdfwk', 'adawk']

    search 匹配到即返回,没有返回  None 

    import re
    
    cc = re.search(r'd+',"asddas112.adasd243")
    print(cc)      #得到的数据必须分组才能显示
    print(cc.group()) 
    
    <_sre.SRE_Match object; span=(6, 9), match='112'>
    112
    import re
    
    cc = re.search(r'd+',"asddas.adasd")
    print(cc)         #如果为空返回None
    #print(cc.group())           #此时不能分组 分组则报错
    
    None

    match 匹配开始

    import re
    ss = 'asdwk cxdfwk adawk 232wk'
    print(re.match('as',ss).group())  
    print(re.match('as',ss))     
    print(re.match('aa',ss))    #可用于判断是否适宜某字符串开头

    as
    <_sre.SRE_Match object; span=(0, 2), match='as'>
    None

    split按照不同分隔符进行分割

    import re
    
    ss = 'adwk,cxdfwk%adawk|wkggg'
    print(re.split(',|%||', ss))
    
    ['adwk', 'cxdfwk', 'adawk', 'wkggg']

    sub替换

    import re
    
    ss = '你大哥就是你大哥,你大爷也是你大爷' 
    print(re.sub('','',ss))    #把你替换为我
    
    我大哥就是我大哥,我大爷也是我大爷
    import re
    
    ss = '你是傻B'
    print(re.sub('(你)(是)(傻)(B)',r'3421', ss))
    
    傻B是你

    compile 制作一个规则

    import re
    obj = re.compile('d{2}')
    ss = 'asd323fsgddfgfhgf'
    print(obj.findall(ss))
    
    ['32']

    finditer

    import re
    
    ss = 'asd3231212sg11441451gf'
    sc = re.finditer('d',ss)
    print(sc)
    print(next(sc).group())
    print([i.group() for i in sc])
    
    <callable_iterator object at 0x000002A0F852A080>
    3
    ['2', '3', '1', '2', '1', '2', '1', '1', '4', '4', '1', '4', '5', '1']

    爬虫

    分组取值

    import re
    cc = '<div>电影名:白蛇缘起下载地址:www.baidu.com</div>'
    it = re.finditer(r'<div>电影名:(?P<name>.*?)下载地址:(?P<url>.*?)</div>',cc)
    print(it)
    for i in it:
        print(i.group('name'))       #通过组的名字获取到数据
        print(i.group('url'))

    爬取电影天堂  海王电影

    import re
    from urllib.request import urlopen  # 引用urllib 模块
    
    # 打开网页获取源代码内容
    c = urlopen('https://www.dytt8.net/html/gndy/dyzz/20190126/58116.html').read().decode('gbk')
    # 写正则    re.S控制正则中的点,可以匹配换行了
    obj = re.compile(r'<div id="Zoom">.*?◎片  名(?P<name>.*?)<br />◎年  代(?P<year>.*?)<br />.*?◎导  演(?P<dy>.*?)<br />.*?<td style="WORD-WRAP: break-word" bgcolor="#fdfddf"><a href="(?P<xiaz>.*?)"',
        re.S)
    # 匹配网页内容
    it = obj.finditer(c)
    for i in it:
        print('电影名:', i.group('name'), '年代:', i.group('year'), '导演:', i.group('dy'), '下载链接:', i.group('xiaz'))
    
    
    电影名:  Aquaman  年代:  2018  导演:  温子仁 James Wan  下载链接: ftp://ygdy8:ygdy8@yg45.dydytt.net:8382/阳光电影www.ygdy8.com.海王.HD.720p.韩版英语中字.mkv

    sys模块

    sys模块是与python解释器交互的一个接口

    import sys
    
    print(sys.argv)     # 命令行参数,第一个元素是程序本身的路径
    print(sys.version)  # 查看 python的版本信息
    print(sys.path)     # 查看模块的搜索路径,初始化时使用pythonpath环境变量的值
    print(sys.platform) # 返回平台操作系统名称
    print(sys.exit())   # 退出程序
    
    ['F:/python24期/L007-老男孩教育-Python24期VIP视频-mp4/练习/111.py']
    3.6.7 (v3.6.7:6ec5cf24b7, Oct 20 2018, 13:35:33) [MSC v.1900 64 bit (AMD64)]
    ['F:\python24期\L007-老男孩教育-Python24期VIP视频-mp4\练习', 'F:\python24期', 'C:\Python36\python36.zip', 'C:\Python36\DLLs', 'C:\Python36\lib', 'C:\Python36', 'C:\Python36\lib\site-packages']
    win32
    import sys
    print(sys.modules)   #解释器自动加载到内存的额模块与包
    
    {'builtins': <module 'builtins' (built-in)>, 'sys': <module 'sys' (built-in)>, '_frozen_importlib': <module 'importlib._bootstrap' (frozen)>, '_imp': <module '_imp' (built-in)>, '_warnings': <module '_warnings' (built-in)>, '_thread': <module '_thread' (built-in)>, '_weakref': <module '_weakref' (built-in)>, '_frozen_importlib_external': <module 'importlib._bootstrap_external' (frozen)>, '_io': <module 'io' (built-in)>, 'marshal': <module 'marshal' (built-in)>, 'nt': <module 'nt' (built-in)>, 'winreg': <module 'winreg' (built-in)>, 'zipimport': <module 'zipimport' (built-in)>, 'encodings': <module 'encodings' from 'C:\Python36\lib\encodings\__init__.py'>, 'codecs': <module 'codecs' from 'C:\Python36\lib\codecs.py'>, '_codecs': <module '_codecs' (built-in)>, 'encodings.aliases': <module 'encodings.aliases' from 'C:\Python36\lib\encodings\aliases.py'>, 'encodings.utf_8': <module 'encodings.utf_8' from 'C:\Python36\lib\encodings\utf_8.py'>, '_signal': <module '_signal' (built-in)>, '__main__': <module '__main__' from 'F:/python24期/L007-老男孩教育-Python24期VIP视频-mp4/练习/111.py'>, 'encodings.latin_1': <module 'encodings.latin_1' from 'C:\Python36\lib\encodings\latin_1.py'>, 'io': <module 'io' from 'C:\Python36\lib\io.py'>, 'abc': <module 'abc' from 'C:\Python36\lib\abc.py'>, '_weakrefset': <module '_weakrefset' from 'C:\Python36\lib\_weakrefset.py'>, 'site': <module 'site' from 'C:\Python36\lib\site.py'>, 'os': <module 'os' from 'C:\Python36\lib\os.py'>, 'errno': <module 'errno' (built-in)>, 'stat': <module 'stat' from 'C:\Python36\lib\stat.py'>, '_stat': <module '_stat' (built-in)>, 'ntpath': <module 'ntpath' from 'C:\Python36\lib\ntpath.py'>, 'genericpath': <module 'genericpath' from 'C:\Python36\lib\genericpath.py'>, 'os.path': <module 'ntpath' from 'C:\Python36\lib\ntpath.py'>, '_collections_abc': <module '_collections_abc' from 'C:\Python36\lib\_collections_abc.py'>, '_sitebuiltins': <module '_sitebuiltins' from 'C:\Python36\lib\_sitebuiltins.py'>, 'sysconfig': <module 'sysconfig' from 'C:\Python36\lib\sysconfig.py'>, '_bootlocale': <module '_bootlocale' from 'C:\Python36\lib\_bootlocale.py'>, '_locale': <module '_locale' (built-in)>, 'encodings.gbk': <module 'encodings.gbk' from 'C:\Python36\lib\encodings\gbk.py'>, '_codecs_cn': <module '_codecs_cn' (built-in)>, '_multibytecodec': <module '_multibytecodec' (built-in)>, 'types': <module 'types' from 'C:\Python36\lib\types.py'>, 'functools': <module 'functools' from 'C:\Python36\lib\functools.py'>, '_functools': <module '_functools' (built-in)>, 'collections': <module 'collections' from 'C:\Python36\lib\collections\__init__.py'>, 'operator': <module 'operator' from 'C:\Python36\lib\operator.py'>, '_operator': <module '_operator' (built-in)>, 'keyword': <module 'keyword' from 'C:\Python36\lib\keyword.py'>, 'heapq': <module 'heapq' from 'C:\Python36\lib\heapq.py'>, '_heapq': <module '_heapq' (built-in)>, 'itertools': <module 'itertools' (built-in)>, 'reprlib': <module 'reprlib' from 'C:\Python36\lib\reprlib.py'>, '_collections': <module '_collections' (built-in)>, 'weakref': <module 'weakref' from 'C:\Python36\lib\weakref.py'>, 'collections.abc': <module 'collections.abc' from 'C:\Python36\lib\collections\abc.py'>, 'importlib': <module 'importlib' from 'C:\Python36\lib\importlib\__init__.py'>, 'importlib._bootstrap': <module 'importlib._bootstrap' (frozen)>, 'importlib._bootstrap_external': <module 'importlib._bootstrap_external' (frozen)>, 'warnings': <module 'warnings' from 'C:\Python36\lib\warnings.py'>, 'importlib.util': <module 'importlib.util' from 'C:\Python36\lib\importlib\util.py'>, 'importlib.abc': <module 'importlib.abc' from 'C:\Python36\lib\importlib\abc.py'>, 'importlib.machinery': <module 'importlib.machinery' from 'C:\Python36\lib\importlib\machinery.py'>, 'contextlib': <module 'contextlib' from 'C:\Python36\lib\contextlib.py'>, 'mpl_toolkits': <module 'mpl_toolkits' (namespace)>}

    通过sys模块给脚本传参

    import sys
    print(sys.argv[0])                #第0个参数为脚本的绝对路径
    # print(sys.argv[1])              #第1个参数
    # print(sys.argv[2])              #第2个参数
    # print(sys.argv[3])              #第3个参数
    
    F:/python24期/python/ceshi.py
        

     引用模块路径

    import sys
    sys.path.insert(0,'模块路径')  #在环境变量列表里的开头插入,一个路径,再引用该模块 就可以找到该模块了

    os模块

    路径相关

    os.getcwd获取当前工作目录的绝对路径

    import os                
    print(os.getcwd())             #获取当前工作目录的绝对路径
    
    F:python24期L007-老男孩教育-Python24期VIP视频-mp4练习

    os.chdir 改变当前脚本的工作目录,相当于shell的cd

    import os
    os.chdir('bbb')     #切换到bbb目录
    print(os.getcwd())   
    
    F:python24期L007-老男孩教育-Python24期VIP视频-mp4练习bb

    os.curdir和os.pardir 返回当前目录和返回上级

    import os
    
    print(os.curdir)
    print(os.pardir)
    
    .             
    ..

    文件夹相关

    os.makedirs 递归创建文件夹

    import os
    
    os.makedirs('文件夹1/文件夹2/文件夹3/文件夹4')

    os.removedirs 递归删除空目录,目录里有文件则不删除

    import os
    
    os.removedirs('文件夹1/文件夹2/文件夹3/文件夹4')

    os.mkdir和rmdir 创建单个文件夹和删除单个空文件夹,如果文件夹非空则报错

    import os
    os.mkdir('a')
    os.rmdir('a')

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

    import os
    print(os.listdir('aaa'))
    
    ['asd.py', 'qwe.py', '__init__.py', '__pycache__']

    和文件相关

    os.remove删除一个文件

    import os
    os.remove('5.dpt')

    os.rename重命名一个文件

    import os
    os.rename('4.dpt', '4.jpg')         #把4.dpt改为4.jpg

    os.stat 获取文件或目录的信息

    import os
    print(os.stat('4.jpg'))
    
    os.stat_result(st_mode=33206, st_ino=1125899906853556, st_dev=3560956539, st_nlink=1, st_uid=0, st_gid=0, st_size=614400, st_atime=1546487602, st_mtime=1546487184, st_ctime=1546487602)
    import os
    print(os.stat('H:pycham脚本'))
    print(os.stat('H:pycham脚本').st_ctime)     #加点获取特定的参数
    print(os.stat('H:pycham脚本').st_mode)
    os.stat_result(st_mode=16895, st_ino=281474976726620, st_dev=597103, st_nlink=1, st_uid=0, st_gid=0, st_size=4096, st_atime=1549081418, st_mtime=1549081418, st_ctime=1548995764)
    1548995764.8935523
    16895

    和操作系统相关

    os.sep         输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    os.linesep    输出当前平台使用的行终止符,win下为"	
    ",Linux下为"
    "
    os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
    os.name       输出字符串指示当前使用平台。win->'nt'; Linux->'posix'

    和执行系统命令相关

    os.system("bash command") 运行shell命令,直接显示  #执行windows命令会乱码 

    os.system("ip a")
    
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:16:3e:2e:cf:16 brd ff:ff:ff:ff:ff:ff
        inet 172.17.191.14/20 brd 172.17.191.255 scope global dynamic eth0
           valid_lft 314754627sec preferred_lft 314754627sec

    os.popen("bash command).read() 运行shell命令,获取执行结果

    os.popen('ip a').read()
    '1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:16:3e:2e:cf:16 brd ff:ff:ff:ff:ff:ff
        inet 172.17.191.14/20 brd 172.17.191.255 scope global dynamic eth0
           valid_lft 314754436sec preferred_lft 314754436sec
    '

    os.environ 获取系统环境变量

    import os
    print(os.environ)

    path系列,和路径相关

    os.path.abspath() 返回path规范化的绝对路径

    import os
    print(os.path.abspath('111'))
    
    F:python24期L007-老男孩教育-Python24期VIP视频-mp4练习111

    os.path.split(path) 将path分割成目录和文件名    元组返回

    import os
    print(os.path.split(__file__))             
    
    ('F:/python24期/L007-老男孩教育-Python24期VIP视频-mp4/练习', '111.py')

    os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素

    import os
    print(os.path.dirname(__file__))
    F:
    /python24期/L007-老男孩教育-Python24期VIP视频-mp4/练习
    import os
    print(os.path.dirname(r'F:python24期L007-老男孩教育-Python24期VIP视频-mp4练习111'))
    
    F:python24期L007-老男孩教育-Python24期VIP视频-mp4练习

    os.path.basename(path) 返回path最后的文件名。如何path以/或结尾,那么就会返回空值,即os.path.split(path)的第二个元素

    import os
    print(os.path.basename(__file__))
    111.py

    os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False   (path到目录不到文件名)

    import os
    print(os.path.exists(r'F:python24期L007-老男孩教育-Python24期VIP视频-mp4练习'))
    
    True

    os.path.isabs(path)  如果path是绝对路径,返回True 

    import os
    print(os.path.isabs(r'F:python24期L007-老男孩教育-Python24期VIP视频-mp4练习'))
    
    True

    os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False

    import os
    print(os.path.isfile(r'F:python24期L007-老男孩教育-Python24期VIP视频-mp4练习'))
    print(os.path.isfile(r'F:python24期L007-老男孩教育-Python24期VIP视频-mp4练习111.py'))
    
    False
    True

    os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False

    import os
    print(os.path.isdir(r'F:python24期L007-老男孩教育-Python24期VIP视频-mp4练习'))
    print(os.path.isdir(r'F:python24期L007-老男孩教育-Python24期VIP视频-mp4练习111.py'))
    
    True
    False

    os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

    import os
    print(os.path.join(r'F:python24期L007-老男孩教育-Python24期VIP视频-mp4练习','4.jpg'))
    
    F:python24期L007-老男孩教育-Python24期VIP视频-mp4练习4.jpg

    os.sep  当前系统的分隔符

    import os
    print(os.sep)
    
    

    os.path.splitext(文件名)[0] 获取不带文件扩展名的文件名

    import os
    print(os.path.splitext(aaa.html)[0])
    
    aaa

    time模块

    格林威治时间timestamp

    import time
    print(time.time())
    
    1546595718.9566987

    格式化时间Format String

    import time
    print(time.strftime('%Y-%m-%d'))
    print(time.strftime("%Y-%m-%d %H-%M-%S"))
    
    2019-01-04
    2019-01-04 17-58-10
    %y 两位数的年份表示(00-99%Y 四位数的年份表示(000-9999%m 月份(01-12%d 月内中的一天(0-31%H 24小时制小时数(0-23%I 12小时制小时数(01-12%M 分钟数(00=59%S 秒(00-59%a 本地简化星期名称
    %A 本地完整星期名称
    %b 本地简化的月份名称
    %B 本地完整的月份名称
    %c 本地相应的日期表示和时间表示
    %j 年内的一天(001-366%p 本地A.M.或P.M.的等价符
    %U 一年中的星期数(00-53)星期天为星期的开始
    %w 星期(0-6),星期天为星期的开始
    %W 一年中的星期数(00-53)星期一为星期的开始
    %x 本地相应的日期表示
    %X 本地相应的时间表示
    %Z 当前时区的名称
    %% %号本身
    import time
    print(time.strftime("%Y{}%m{}%d{} %H:%M:%S").format('', '', ''))
    
    2019年01月04日 18:01:07

    结构化时间struct_time

    import time
    print(time.localtime())
    
    time.struct_time(tm_year=2019, tm_mon=1, tm_mday=4, tm_hour=18, tm_min=2, tm_sec=11, tm_wday=4, tm_yday=4, tm_isdst=0)
    索引(Index)属性(Attribute)值(Values)
    0 tm_year(年) 比如2011
    1 tm_mon(月) 1 - 12
    2 tm_mday(日) 1 - 31
    3 tm_hour(时) 0 - 23
    4 tm_min(分) 0 - 59
    5 tm_sec(秒) 0 - 60
    6 tm_wday(weekday) 0 - 6(0表示周一)
    7 tm_yday(一年中的第几天) 1 - 366
    8 tm_isdst(是否是夏令时) 默认为0

    几种时间格式之间的转化

     

    格式化时间Format String ----> 结构化时间struct_time

    import time
    ft = time.strftime('%Y/%m/%d %H:%M:%S')
    st = time.strptime(ft,'%Y/%m/%d %H:%M:%S')
    print(st)

    结构化时间struct_time ---> 时间戳timestamp

    t = time.mktime(st)
    print(t)
    1546596547.0

    时间戳timestamp ----> 结构化时间struct_time 

    import time
    t = time.time()
    st = time.localtime(t)
    print(st)
    
    time.struct_time(tm_year=2019, tm_mon=1, tm_mday=4, tm_hour=18, tm_min=10, tm_sec=20, tm_wday=4, tm_yday=4, tm_isdst=0)

    结构化时间struct_time  ---> 格式化时间struct_time

    ft = time.strftime('%Y/%m/%d %H:%M:%S',st)
    print(ft)
    
    2019/01/04 18:11:04

       

  • 相关阅读:
    终于把老板的项目搞完了---最后一步项目部署
    linux rz/sz 拖动文件上传
    layui之table.render使用(含后台详细代码实现)
    layui upload 后台获取不到值
    Layui upload动态传参,后台接收不到,解决方法
    hibernate 多条件查询,查询部分字段等操作
    IDEA自动生成序列化ID
    MySQL范围查询(日期)
    安全随机数!Java 随机数 Random 与 SecureRandom
    java poi 写excel到指定目录
  • 原文地址:https://www.cnblogs.com/ywrj/p/10211206.html
Copyright © 2011-2022 走看看