Python递归列出目录中文件脚本及其匿名函数

1.递归列出目录里的文件的脚本举例

列出目录中的文件可以通过下面方法:os.listdir()

In [1]: import os

In [4]: os.listdir('/root')

Out[4]:

['.tcshrc',

'.bash_history',

'.bashrc',

'ENV',

'.cache',

'.config',

'.cshrc',

'.bash_logout',

'python',

'.ssh',

'shell',

'.bash_profile',

'.ipython',

'.viminfo',

'dictionary.txt',

'1.txt']

判断是否为目录:

In [5]: os.path.isdir('/home')

Out[5]: True


判断是否为文件:

In [7]: os.path.isfile('/etc/rc.local')

Out[7]: True


拼接文件名字的绝对路径:

In [8]: os.path.join('/etc/','passwd','abc')

Out[8]: '/etc/passwd/abc'

列出目录下所有文件脚本如果下:

#!/usr/bin/env python

# @Time     :2018-01-05 15:11

# @Author   :FengXiaoqing

# @file     :listDir.py

import os

import sys

def print_files(path):

lsdir = os.listdir(path)

dirs = [i for i in lsdir if os.path.isdir(os.path.join(path,i))]

files = [i for i in lsdir if os.path.isfile(os.path.join(path,i))]

if dirs:

for d in dirs:

print_files(os.path.join(path,d))

if files:

for f in files:

print os.path.join(path,f)

print_files(sys.argv[1])

2.匿名函数lambda

lambda函数是一种快速定义单选的最小函数,可以用在任何需要函数的地方。

3*5实现方法:

In [1]: def fun(x,y):

...:     return x * y

...:

In [2]: fun(3,5)

Out[2]: 15

匿名函数定义如果下:

In [3]: lambda x,y:x * y

Out[3]: <function __main__.<lambda>>    #返回的对象

In [4]: r = lambda x,y:x * y

In [6]: r(3,5)

Out[6]: 15

匿名函数优点:

1.使用python写一些脚本时候,使用lambda可以省去定义函数的过程,让代码更加精简。

2.对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要层次理论考虑命名的问题。

3.使用lambda在某些时候让代码更容易理解。

lambda基础:

lambda语句中,冒号前是参数,可以有多个,逗号隔开,冒号右边是返回值。

lambda语句构建的其实是一个函数对象。

help(reduce)

Help on built-in function reduce in module __builtin__:

reduce(...)

reduce(function, sequence[, initial]) -> value

Apply a function of two arguments cumulatively to the items of a sequence,

from left to right, so as to reduce the sequence to a single value.

For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates

((((1+2)+3)+4)+5).  If initial is present, it is placed before the items

of the sequence in the calculation, and serves as a default when the

sequence is empty.

(END)

reduce二元计算:

In [19]: def add(x,y):

return x + y

....:

In [20]: add(1,3)

Out[20]: 4

求1到100相加的和:

In [23]: reduce(add,range(1,101))

Out[23]: 5050

In [25]: reduce(lambda x,y:x + y ,range(1,101))

Out[25]: 5050

求阶乘:

In [26]: reduce(lambda x,y:x * y ,range(1,6))

Out[26]: 120

习题

1. 从终端接收若干个数字,要求使用filter()函数,将输入的不是数字的值剔除掉(用户输入的内容有随机性,当我们要接收一个数字的时候,他可能会输入一个字符串过来,要求当用户输入的不是数字,就剔除掉)

2. 从终端接收若干个以空格隔开的字符串,然后去除所有的26个字符之外的字符后,打印到屏幕上

要求:使用map()函数,map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

3.从终端接收若干个以空格隔开的字符串

(1).以空格隔开的字符串为用户想要输入的一个值

(2).用户在输入时不小心按出来了字母键

示例如下

"afda111 dafd222 3dfad33 4ss4dd4"

这个字符串,其实是用户想要求 111 222 333 444 的和

要求:把每个值中的字母去掉,并计算出所有值的和

提示:使用reduce函数,结合前两题使用过的方法,可以很简单的算出

原文地址:http://blog.51cto.com/fengyunshan911/2057986

时间: 2024-10-03 14:47:00

Python递归列出目录中文件脚本及其匿名函数的相关文章

Bash Shell 递归实现目录中文件拷贝

前言 今天工作中遇到了一个问题,如果将目录A中的文件拷贝到目录B中(前提目录B没有该文件),并保持文件在目录A的结构.项目重点如下: 需要在目录B中保持文件在目录A中的结构.假设A目录文件 A/test/1.txt,转移到目录B中应该是B/test/1.txt.同时还需要考虑目录B中是否存在test目录,多级目录就要考虑递归了.(还好,bash shell里写个目录递归遍历还是比较简单的.) 需要考虑A中文件是否在B中已经存在同名文件,如果存在,则不需要拷贝. 项目需求示例图如下: 实现 项目需

程序1-1 列出目录中文件

#include "apue.h" #include <dirent.h> int main(int argc, char* argv[]) { DIR* dp; struct dirent* dirp; if (argc != 2) err_quit("usage: ls directory_name"); if ((dp = opendir(argv[1])) == NULL) { err_sys("can't open %s",

递归列出目录里的文件、匿名函数

递归列出目录里的文件 #!/usr/bin/python import os import sys def print_file(path): lidir=os.listdir(path) dirs=[i for i in lidir if os.path.isdir(os.path.join(path,i))] files=[i for i in lidir if os.path.isfile(os.path.join(path,i))] if files: for i in files: p

Python递归遍历目录下所有文件

#自定义函数: import ospath="D:\\Temp_del\\a" def gci (path): parents = os.listdir(path) for parent in parents: child = os.path.join(path,parent) #print(child) if os.path.isdir(child): gci(child) # print(child) else: print(child) gci(path) #使用os.walk方

python导入上级目录中的模块

python导入同级别模块很方便: import xxx 要导入下级目录页挺方便,需要在下级目录中写一个__init__.py文件 from dirname import xxx 要导入上级目录,可以使用sys.path: 首先sys.path的作用是:当使用import语句导入模块时,解释器会搜索当前模块所在目录以及sys.path指定的路径去找需要import的模块 所以改变思路,直接把上级目录加到sys.path里:sys.path.append('../') from fatherdir

《Linux学习并不难》文件/目录管理(5): ls命令列出目录和文件信息

7.5  <Linux学习并不难>文件/目录管理(5): ls命令列出目录和文件信息 使用ls命令,对于目录而言将列出其中的所有子目录与文件信息:对于文件而言将输出其文件名以及所要求的其它信息.     命令语法: ls [选项] [目录|文件] 命令中各选项的含义如表所示. 选项 选项含义 -a 显示指定目录下所有子目录与文件,包括隐藏文件 -c 配合-lt:根据ctime 排序并显示ctime -d 如果参数是目录,只显示其名称而不显示其下的各文件和子目录 -F 显示文件类型 -i 在输出

C#统计目录中文件MD5值

1. [代码]统计目录中文件MD5值 using System.IO;using System.Security.Cryptography;using System.Collections;using System.Windows.Forms; IDataObject iData = Clipboard.GetDataObject();   if (iData.GetDataPresent(DataFormats.Text))   {string filepath=(string)iData.G

python生成器 获取 目录下文件

# os.walk()和os.list 都是得到所有文件的列表, 如果目录下文件特别多, 上亿了, 我们就需要生成器的方式获取 # 要求目录下面没有目录, 会递归到子目录下面找文件, (如果有子目录可以在下面代码基础上做修改) def gen_file(path, per_file_count): # 目录和一次想要回去的文件数量 i = 0 scandir_it = scandir(path) # 递归获取目录下文件, 返回迭代器 while True: try: entry = next(s

avascript中的自执行匿名函数

Javascript中的自执行匿名函数 格式: (function(){ //代码 })(); 解释:这是相当优雅的代码(如果你首次看见可能会一头雾水:)),包围函数(function(){})的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命名函数,括号内为匿名函数的参数. 来个带参数的例子: (function(arg){ alert(arg+100); })(20); // 这个例子返回120. 重要用途:可以用它创建命名空间,只要把自己所有的代码都写在这个特殊的函数包装