Python遞迴列出目錄中檔案指令碼及其匿名函式
阿新 • • 發佈:2018-11-30
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 # 2018/11/29 15:11 #FengXiaoqing # 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