代码改变世界

列表解析、字典解析和集合解析

2011-11-29 18:44  夜幕降临  阅读(1175)  评论(0编辑  收藏  举报

multiple = 1024 if a_kilobyte_is_1024_bytes else 

1000


Python 3 带有一个模块叫做 os,代表 “操作系统(operating
system)。” os 模块 包含非常多的函数用于获取(和修改)本地目录、文件进程、环境变量等的信息。
使用 os.getcwd() 函数获得当前工作目录。
使用 os.chdir()函数改变当前工作目录

os.path 模块。os.path 模块包含了操作文件名和目录名的函数.

glob 模块是 Python 标准库中的另一个工具,它可以通过编程的方法获得一个目录的内容

每一个现代文件系统都对文件存储了元信息: 创建时间,最后修改时间,文件大小等等

调用 os.stat() 函数返回一个包含多种文件元信息的对象

time.localtime() 函数将从纪元到现在的秒数这个格式表示的时间(os.stat()函数返回值的 st_mtime 属性)转换成更有用的包含年、月、日、小时、分钟、秒的结构体。

os.path.realpath() #返回文件的绝对路径

===============================
列表解析
你可以在列表解析中使用任何的 Python 表达式。
列表解析提供了一种紧凑的方式,实现了通过对列表中每一个元素应用一个函数的方法来将一个列表映射到另一个列表。。。列表解析创造一个新的列表而不改变原列表
表达式从右向左看
[elem * 2 for elem in a_list]
可以在列表解析的最后加入 if 子句来过滤列表
[f for f in glob.glob('*.py') if os.stat(f).st_size >6000]
列表解析并不限制表达式的复杂程度
[(os.stat(f).st_size, os.path.realpath(f)) for f in glob.glob('*.xml')]
===============================
字典解析和列表解析类似,只不过它生成字典而不是列表。
{}
metadata_dict = {f:os.stat(f) for f in glob.glob('*test*.py')}

同列表解析一样,你可以在字典解析中包含 if 字句来过滤输入序列,对于每一个元素字句中的表达式都会被求值

===============================
同样,集合也有自己的集合解析的语法。它和字典解析的非常相似,唯一的不同是集合只有值而没有 键:值对
a_set = set(range(10))
{x ** 2 for x in a_set}