1.8 递归列出目录里的文件

os内的几个常用方法: os.listdir() 列出目录下所有的文件 os.listdir(".") os.listdir("/home") 列出当前目录和/home目录下的所有文件,只列出第一层 os.path.isdir() 判断是否是目录,是返回true,否则返回false os.path.isfile() 判断是否是文件,是返回true,否则返回false os.path.join() 链接文件的路径 ,只是链接,不会判断文件存不存在 In [5]: os.path.join('/etc/','passwd') Out[5]: '/etc/passwd'

打印目录下所有文件 def print_files(path): isdir, isfile, join = os.path.isdir, os.path.isfile, os.path.join lsdir = os.listdir(path) dirs = [i for i in lsdir if isdir(join(path,i))] files = [i for i in lsdir if isfile(join(path,i))] if dirs: for d in dirs: print_files(join(path,d)) if files: for f in files: print join(path,f) print_files(sys.argv[1])

注释版本: #!/usr/bin/python

-- coding:UTF-8 --

import os import sys

def print_files(path): lsdir=os.listdir(path) #列出path路径下的所有文件和文件夹 dirs=[i for i in lsdir if os.path.isdir(os.path.join(path,i))] #循环遍历lsdir,并判断是否是目录,如果是,则链接路径并赋值给dirs files=[i for i in lsdir if os.path.isfile(os.path.join(path,i))] #循环遍历lsdir,并判断是否是文件,如果是,则链接路径并赋值给files if files: for f in files: #如果文件存在,则遍历文件列表 print os.path.join(path,f) #循环打印文件名 if dir: for d in dirs: #对目录列表再次遍历 print_files(os.path.join(path,d)) #递归调用,继续在深一层的目录下查找 print_files(sys.argv[1]) 相当于linux命令的 find -type f

1.9 匿名函数 匿名函数: - lambda函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方。可以把函数写在一行里。

•def fun(x, y): return x*y fun(2, 3) 普通函数定义

•r = lambda x,y: x*y r(2, 3) lambda函数定义

•匿名函数优点: - 1.使用python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。 - 2. 对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题。 - 3. 使用lambda在某些时候让代码更容易理解。

•lambda语句中,冒号前是参数,可以有多个,逗号隔开,冒号右边是返回值。 •lambda语句构建的其实是一个函数对象

reduce()函数 reduce(fun,range(1,5)) 对range(1,5)返回的序列用fun函数去处理 reduce函数第二个参数是一个序列 可以用lambda定义reduce中的函数 reduce(lambda x,y:x*y) In [13]: reduce(lambda x, y:x+y, range(1,101)) Out[13]: 5050

序列处理函数 len() 取序列的长度 max() 取序列的最大值 min() 取序列的最小值