前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 之解析

Python 之解析

作者头像
py3study
发布2020-01-15 17:58:48
4280
发布2020-01-15 17:58:48
举报
文章被收录于专栏:python3python3

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

代码语言:javascript
复制
通过对列表/字典/集合每一个元素应用一个函数的方法将一个列表映射到另一个列表/字典/集合

准备知识
    os (operating system) 模块
        os.getcwd()  获取当前工作目录
            >>> import os
            >>> print(os.getcwd())
            c:\Users\sreamy
        os.chdir()  切换工作目录(使用正斜杠)
            >>> import os
            >>> print(os.getcwd())
            c:\Users\sreamy
            >>> os.chdir('D:/')
            >>> print(os.getcwd())
            D:\
        os.stat() 获取文件元信息(文件创建时间,最后修改时间,文件大小等)
            >>> import os
            >>> print(os.getcwd())
            C:\Users\sreamy\.PyCharm2018.2\config
            >>> 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/config\pycharm.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:\Users\sreamy           --> os.path.expanduser('~')  家目录路径
            >>> print(os.path.join(os.path.expanduser('~'),'.PyCharm2018.2','config','pycharm.key'))
            C:\Users\sreamy\.PyCharm2018.2\config\pycharm.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:\Users\sreamy\.PyCharm2018.2\config
            >>> os.path.realpath('pycharm.key')
            'C:\\Users\\sreamy\\.PyCharm2018.2\\config\\pycharm.key'
            >>> print(os.path.realpath('pycharm.key'))
            C:\Users\sreamy\.PyCharm2018.2\config\pycharm.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}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档