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}
相关文章推荐
- Python-elementTree方法解析xml文件-01
- Python中的 __all__和__path__ 解析
- python 列表解析
- Python Django 中的STATIC_URL 设置和使用解析
- python自带的minidom创建和解析xml
- python解析xml文件实例分析
- Python下的数据处理和机器学习,对数据在线及本地获取、解析、预处理和训练、预测、交叉验证、可视化
- python解析xml文件实例分析
- 【数据平台】Python解析Ngnix日志
- python解析json报错ValueError: Expecting property name: line 1 column 2 (char 1)
- 用Python解析火狐浏览器的SQLite3数据库
- [代码笔记] python 之xml解析_dom
- Python直接赋值、浅拷贝和深度拷贝解析
- Python命令行解析argparse常用语法简单使用
- python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
- 一文带你快速了解,python是如何解析XML文件
- Python实现动态图的解析、合成与倒放
- Python解析树及树的遍历
- python基础(3)--条件判断循环语句与列表解析,生成器
- caffe python visualization程序解析