您的位置:首页 > 编程语言 > Python开发

Python 之解析

2019-04-13 19:03 330 查看

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

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

准备知识
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}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: