今日所學內容
一、模塊
二、遞歸刪除的思路
三、案例:跨文件夾移動文件
四、案例 遞歸遍歷打印目標路徑中所有的txt文件
五、項目開放周期
一、模塊
1、與時間相關的模塊
1)time :時間
時間戳(timestamp):time.time()
延遲線程的運行:time.sleep(secs)
(指定時間戳下的)當前時區時間:time.localtime([secs])
(指定時間戳下的)格林威治時間:time.gmtime([secs])
(指定時間元組下的)格式化時間:time.strftime(fmt[,tupletime])
%y 兩位數的年份表示(00-99) %Y 四位數的年份表示(000-9999)
%m 月份(01-12) %d 月內中的一天(0-31)
%H 24小時制小時數(0-23) %I 12小時制小時數(01-12)
%M 分鐘數(00=59) %S 秒(00-59)
%a 本地簡化星期名稱 %A 本地完整星期名稱
%b 本地簡化的月份名稱 %B 本地完整的月份名稱
%c 本地相應的日期表示和時間表示 %j 年內的一天(001-366)
%p 本地A.M.或P.M.的等價符 %U 一年中的星期數(00-53)星期天為星期的開始
%w 星期(0-6),星期天為星期的開始
%W 一年中的星期數(00-53)星期一為星期的開始
%x 本地相應的日期表示 %X 本地相應的時間表示
%Z 當前時區的名稱 %% %號本身
2)canendar : 日歷
判斷閏年:calendar.isleap(year)
查看某年某月日歷:calendar.month(year, mouth)
查看某年某月起始星期與當月天數:calendar.monthrange(year, mouth)
查看某年某月某日是星期幾:calendar.weekday(year, month, day)
3)datatime : 可以運算的時間
當前時間:datetime.datetime.now()
昨天:datetime.datetime.now() + datetime.timedelta(days=-1)
修改時間:datatime_obj.replace([...])
格式化時間戳:datetime.date.fromtimestamp(timestamp)
2、sys : 系統
命令行參數List,第一個元素是程序本身路徑:sys.argv
退出程序,exit(0):正常退出時 sys.exit(n)
exit(1): 非正常退出
404 : 路徑有問題
獲取Python解釋程序的版本信息:sys.version
最大int值:sys.maxsize | sys.maxint
環境變量:sys.path
操作系統平臺名稱:sys.platform
3、OS : 操作系統
生成單級目錄: os.mkdir('dirname')
生成多層目錄: os.makedirs('dirname1/.../dirnamen2')
重命名: os.rename("oldname","newname")
工作目錄: os.getcwd()
刪除單層空目錄: os.rmdir('dirname')
移除多層空目錄: os.removedirs('dirname1/.../dirnamen')
列舉目錄下所有資源: os.listdir('dirname')
路徑分隔符: os.sep
行終止符: os.linesep
文件分隔符: os.pathsep
操作系統名: os.name
操作系統環境變量: os.environ
執行shell腳本: os.system()
4、os.path(ntpath) : 系統路徑操作
執行文件的當前路徑: __file__
返回path規范化的絕對路徑: os.path.abspath(path) ?
將path分割成目錄和文件名二元組返回: os.path.split(path)? 把目錄最后一個拆開返回
獲取上一級目錄: os.path.dirname(path)
最后一級名稱: os.path.basename(path)
指定路徑是否存在: os.path.exists(path)
是否是絕對路徑: os.path.isabs(path)
是否是文件: os.path.isfile(path)
是否是路徑: os.path.isdir(path)
路徑拼接: os.path.join(path1[, path2[, ...]])
最后存取時間: os.path.getatime(path)
最后修改時間: os.path.getmtime(path)
目標大小: os.path.getsize(path)
normcase函數
在Linux和Mac平臺上,該函數會原樣返回path,
在windows平臺上會將路徑中所有大寫字符轉換為小寫,并將所有斜杠轉換為反斜杠。
>>> os.path.normcase('c:/windows\\system32\\')??
'c:\\windows\\system32\\'
normpath函數
規范化路徑,如 .. 和 /
>>> os.path.normpath('c://windows\\System32\\../Temp/')??
'c:\\windows\\Temp'? 不轉換大小寫會轉換 /?? 但是 .. 會消除它前一個路徑
>>> a='/Users/jieli/test1/\\\a1/\\\\aa.py/../..'
>>> print(os.path.normpath(a))
/Users/jieli/test1
5、random
(0, 1):random.random(n) # 0~1 以內的 n 個小數,不包括0和1
random.randint(1, 10) [1, 10] 整數
random.randrange(1, 10) [1, 10)/[1, 9] 整數
random.uniform(1, 10) (1, 10) 內的小數
單例集合隨機選擇1個:random.choice(item)
單例集合隨機選擇n個:random.sample(item, n)
洗牌/打亂 單列集合:random.shuffle(item)
?
二、遞歸刪除的思路
?
def delete_dir(folder):
??? for path in os.listdir(folder):
??????? # 如果path是文件夾 delete_dir(path)
??????? # 如果是文件os.remove(path)
??????? pass
??? # for走完了代表folder內部刪空了,可以刪folder
?
三、案例:跨文件夾移動文件
import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_DIR)
def move_file(file, folder):
??? if not (os.path.exists(file) and os.path.isfile(file)):
??????? print('文件不存在或非法')
??????? return False
??? if not os.path.exists(folder):
??????? os.makedirs(folder)
??? file_name = os.path.split(file)[1]
??? # file_name = os.path.basename(file)
??? new_file = os.path.join(folder, file_name)
??? with open(file, 'rb') as rf, open(new_file, 'wb') as wf:
??????? for line in rf:
??????????? wf.write(line)
??? os.remove(file)
# 將目標文件夾下的目標文件移動到指定文件夾下
file = os.path.join(BASE_DIR, 'part5', 'mm.py')
folder = os.path.join(BASE_DIR, 'part6', 'abc')
move_file(file, folder)
四、案例 遞歸遍歷打印目標路徑中所有的txt文件
import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_DIR)
def print_txt(folder):
??? if not os.path.exists(folder) or os.path.isfile(folder):
??????? return
??? for path in os.listdir(folder):
??????? file_path = os.path.join(folder, path)
??????? if os.path.isfile(file_path) and file_path.endswith('.txt'):
??????????? print(path)
??????? elif os.path.isdir(file_path):
??????????? print_txt(file_path)? # 遞歸
target_path = os.path.join(BASE_DIR, 'part6', 'target')
print_txt(target_path)
五、項目開放周期
1.調研
2.需求分析
3.架構師完成項目demo,完成項目架構
4.分工
5.寫代碼
6.白盒黑盒測試
7.項目審核發布 => 項目 -> 產品
bin: 可執行文件,入口,入口也可以放在項目根目錄下
core: 核心代碼
db:數據庫相關文件
interface:接口
lib:包、模塊、第三方文件夾
log:日志
setting:配置
static:靜態文件
?