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函數,結合前兩題使用過的方法,可以很簡單的算出
本文轉自 楓葉雲 51CTO部落格,原文連結:http://blog.51cto.com/fengyunshan911/2057986