Python 之解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 之解析相关的知识,希望对你有一定的参考价值。

Python 之列表/字典/集合解析

通过对列表/字典/集合每一个元素应用一个函数的方法将一个列表映射到另一个列表/字典/集合

准备知识
    os (operating system) 模块
        os.getcwd()  获取当前工作目录
            >>> import os
            >>> print(os.getcwd())
            c:Userssreamy
        os.chdir()  切换工作目录(使用正斜杠)
            >>> import os
            >>> print(os.getcwd())
            c:Userssreamy
            >>> os.chdir(‘D:/‘)
            >>> print(os.getcwd())
            D:        os.stat() 获取文件元信息(文件创建时间,最后修改时间,文件大小等)
            >>> import os
            >>> print(os.getcwd())
            C:Userssreamy.PyCharm2018.2config
            >>> import glob
            >>> glob.glob(‘pycharm.*‘)
            [‘pycharm.key‘]
            >>> metadata = os.stat(‘pycharm.key‘)   --> 获取文件元信息
            >>> metadata.st_mtime    -->   文件最后修改时间
            1554117802.3633113
            >>> import time
            >>> time.localtime(metadata.st_mtime)
            time.struct_time(tm_year=2019, tm_mon=4, tm_mday=1, tm_hour=19, tm_min=23, tm_sec=22, tm_wday=0, tm_yday=91, tm_isdst=0)
            >>> metadata.st_size     -->   文件大小(字节)
            6000

        os.path() 处理文件名和目录
        os.path.join() 从一个或多个路径中构造一个路径名
            >>> import os.path
            >>> os.path.join(‘c:/users/sreamy/.PyCharm2018.2/config/‘,‘pycharm.key‘)
            ‘c:/users/sreamy/.PyCharm2018.2/config/pycharm.key‘   --> 路径名带/
            >>> print(os.path.join(‘c:/users/sreamy/.PyCharm2018.2/config/‘,‘pycharm.key‘))
            c:/users/sreamy/.PyCharm2018.2/config/pycharm.key
            >>> os.path.join(‘c:/users/sreamy/.PyCharm2018.2/config/‘,‘pycharm.key‘)
            ‘c:/users/sreamy/.PyCharm2018.2/config/pycharm.key‘

            >>> print(os.path.join(‘c:/users/sreamy/.PyCharm2018.2/config‘,‘pycharm.key‘))
            c:/users/sreamy/.PyCharm2018.2/configpycharm.key    --> 路径名不带/
            >>> os.path.join(‘c:/users/sreamy/.PyCharm2018.2/config‘,‘pycharm.key‘)
            ‘c:/users/sreamy/.PyCharm2018.2/config\pycharm.key‘

            >>> import os.path
            >>> print(os.path.expanduser(‘~‘))
            C:Userssreamy           --> os.path.expanduser(‘~‘)  家目录路径
            >>> print(os.path.join(os.path.expanduser(‘~‘),‘.PyCharm2018.2‘,‘config‘,‘pycharm.key‘))
            C:Userssreamy.PyCharm2018.2configpycharm.key

        os.path.split()  拆分并返回目录名和文件名
        os.path.splitext()  拆分文件名并返回短文件名和扩展名
            >>> import os.path
            >>> pathname = ‘C:/Users/sreamy/.PyCharm2018.2/config/pycharm.key‘
            >>> (dirname,filename) = os.path.split(pathname)
            >>> dirname
            ‘C:/Users/sreamy/.PyCharm2018.2/config‘
            >>> filename
            ‘pycharm.key‘

            >>> (shortname,extension) = os.path.splitext(filename)
            >>> shortname
            ‘pycharm‘
            >>> extension
            ‘.key‘

        os.path.realpath() 构建文件按绝对路径
            >>> import os
            >>> print(os.getcwd())
            C:Userssreamy.PyCharm2018.2config
            >>> os.path.realpath(‘pycharm.key‘)
            ‘C:\Users\sreamy\.PyCharm2018.2\config\pycharm.key‘
            >>> print(os.path.realpath(‘pycharm.key‘))
            C:Userssreamy.PyCharm2018.2configpycharm.key

    glob  罗列目录内容|(使用通配符的方式)
            >>> import os
            >>> os.chdir(‘C:/Users/sreamy/.PyCharm2018.2‘)
            >>> import glob
            >>> glob.glob(‘config/*.pwd‘)
            [‘config\pdb.pwd‘]
            >>> os.chdir(‘C:/Users/sreamy/.PyCharm2018.2/config‘)
            >>> glob.glob(‘*port*.*‘)
            [‘port.lock‘]

列表解析
    通过对列表每一个元素应用一个函数的方法将一个列表映射到另一个列表
    提供一个紧凑的方式,可使用任何的Python 表达式
            >>> a_list = [1,2,4,8]
            >>> [elem ** 2 for elem in a_list]
            [1, 4, 16, 64]
            >>> a_list
            [1, 2, 4, 8]

            >>> import os,glob
            >>> os.getcwd()
            ‘C:\Users\sreamy\.PyCharm2018.2\config‘
            >>> os.chdir(‘C:/users/sreamy/.PyCharm2018.2/config/tasks‘)
            >>> glob.glob(‘*.zip‘)
            [‘fullstack.contexts.zip‘, ‘fullstack.tasks.zip‘, ‘untitled.contexts.zip‘, ‘untitled.tasks.zip‘]
            >>> [os.path.realpath(f) for f in glob.glob(‘*.zip‘)]
            [‘C:\users\sreamy\.PyCharm2018.2\config\tasks\fullstack.contexts.zip‘,
            ‘C:\users\sreamy\.PyCharm2018.2\config\tasks\fullstack.tasks.zip‘,
            ‘C:\users\sreamy\.PyCharm2018.2\config\tasks\untitled.contexts.zip‘,
            ‘C:\users\sreamy\.PyCharm2018.2\config\tasks\untitled.tasks.zip‘]

            >>> import os,glob
            >>> os.getcwd()
            ‘C:\users\sreamy\.PyCharm2018.2\config\tasks‘
                 ‘‘‘ tasks 目录下所有zip文件的大小和绝对路径 ‘‘‘
            >>> [[os.stat(f).st_size,os.path.realpath(f)] for f in glob.glob(‘*.zip‘)]
            [[139, ‘C:\users\sreamy\.PyCharm2018.2\config\tasks\fullstack.contexts.zip‘],
             [139, ‘C:\users\sreamy\.PyCharm2018.2\config\tasks\fullstack.tasks.zip‘],
             [35247, ‘C:\users\sreamy\.PyCharm2018.2\config\tasks\test.zip‘],
             [139, ‘C:\users\sreamy\.PyCharm2018.2\config\tasks\untitled.contexts.zip‘],
             [139, ‘C:\users\sreamy\.PyCharm2018.2\config\tasks\untitled.tasks.zip‘]]
                 ‘‘‘ task 目录下所有ZIP 文件的大小和绝对路径且 文件大小需要小于1000 字节 ‘‘‘
            >>> [[os.stat(f).st_size,os.path.realpath(f)] for f in glob.glob(‘*.zip‘) if os.stat(f).st_size < 1000]
            [[139, ‘C:\users\sreamy\.PyCharm2018.2\config\tasks\fullstack.contexts.zip‘],
             [139, ‘C:\users\sreamy\.PyCharm2018.2\config\tasks\fullstack.tasks.zip‘],
             [139, ‘C:\users\sreamy\.PyCharm2018.2\config\tasks\untitled.contexts.zip‘],
             [139, ‘C:\users\sreamy\.PyCharm2018.2\config\tasks\untitled.tasks.zip‘]]

字典解析
    和列表解析相似,返回的值是字典而已
            >>> import os,glob
            >>> os.getcwd()
            ‘C:\users\sreamy\.PyCharm2018.2\config\tasks‘
            >>> metadata_dict = {f:os.stat(f) for f in glob.glob(‘*.zip‘)}
            >>> type(metadata_dict)
            <class ‘dict‘>
            >>>
            >>> metadata_dict.keys()
            dict_keys([‘fullstack.contexts.zip‘,
                       ‘fullstack.tasks.zip‘,
                       ‘test.zip‘,
                       ‘untitled.contexts.zip‘,
                       ‘untitled.tasks.zip‘])
            >>> metadata_dict[‘fullstack.tasks.zip‘].st_size
            139
    字典键 <--> 值交换
        >>> a_list = {‘a‘:1,‘b‘:2,‘c‘:3}
        >>> {value:key  for key,value in a_list.items()}
        {1: ‘a‘, 2: ‘b‘, 3: ‘c‘}
        >>> a_list
        {‘a‘: 1, ‘b‘: 2, ‘c‘: 3}

集合解析
    和字典解析类似,字典是键值对,集合只有值
        >>> a_set = set(range(5))
        >>> a_set
        {0, 1, 2, 3, 4}
        >>> {x ** 2 for x in a_set}
        {0, 1, 4, 9, 16}
        >>> a_set
        {0, 1, 2, 3, 4}
        >>> {x for x in a_set if x % 2 == 1}
        {1, 3}
        >>> {x for x in range(8)}
        {0, 1, 2, 3, 4, 5, 6, 7}

以上是关于Python 之解析的主要内容,如果未能解决你的问题,请参考以下文章

Python之如何优雅的重试

片段(Java) | 机试题+算法思路+考点+代码解析 2023

Python之深入解析Vulture如何一键找出项目中所有无效的代码

Python之深入解析一行代码计算每个省面积的神器Geopandas

python之模块和包

Python之JSON数据解析实例:新闻头条