day18(time | sys | os 模塊,遞歸刪除文件,項目分析)

来源:https://www.cnblogs.com/HZLS/archive/2019/05/07/10828570.html
-Advertisement-
Play Games

一,複習 二,今日內容 三,sys模塊 四,calendar 模塊 五,time 模塊 六,datetime 模塊 七,os 模塊 八,os.path 模塊 九,os案例 : 十,項目開發分析: ...


一,複習

'''
1.跨文件夾導包 - 不用考慮包的情況下直接導入文件夾(包)下的具體模塊

2.__name__: py自執行 '__main__' | py被導入執行 '模塊名'

3.包:一系列模塊的集合體,通過包內的__init__文件來管理包中所有模塊提供給外界的名字
    -- 存放所以模塊的文件夾名就是包名

4.導包三件事:
1)編譯__init__文件的pyc
2)執行__init__文件形成全局名稱空間,作為包的全局名稱空間,包能直接使用的名字全部是__init__文件中提供的
3)在導包文件中形成一個名字指向包的名稱空間

5.包的管理:通過__init__文件來管理,在包中使用相對導入

. 代表當前文件所在目錄
.. 代表當前文件所在目錄的上一級目錄
# .開頭的導包語法,from .開頭 import 名字,只能存活在包內

'''

 

二,今日內容

'''
1.時間模塊
2.系統模塊
3.項目開發目錄規範
4.loggin
5.json

 

三,sys模塊

"""

  sys是system的縮寫,表示系統,但是要註意

  sys指的是解釋器自身,而非操作系統

  所以該模塊主要是處理與解釋器相關的操作的

  提供的函數和屬性:

    sys.argv      命令行參數List,第一個元素是程式本身路徑
    sys.exit(n)    退出程式,正常退出時exit(0)
    sys.version    獲取Python解釋程式的版本信息
    sys.maxint     最大的Int值
    sys.path      返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變數的值
    sys.platform    返回操作系統平臺名稱

"""""
其中提供了有一個argv屬性用於接收從控制台傳入的參數,當你要開發一款命令行程式時,該屬性非常重要

案例:開發一款命令行界面的文件複製工具

思路:第一個參數是當前執行文件本身,第二個參數用於接收源文件,第三個參數用於接收目標文件

import sys

source_path = sys.argv[1]
target_path = sys.argv[2]
print(source_path)
print(target_path)
with open(source_path, "rb") as f1:
    with open(target_path, "wb") as f2:
        while True:
            data = f1.read(1024)
            if not data:
                break
            f2.write(data)

 

四,calendar 模塊

"""
判斷閏年:calendar.isleap(year) 能被4整除但不能被100整除的年份為普通閏年
查看某年某月日曆:calendar.month(year, mouth)
查看某年某月起始星期與當月天數:calendar.monthrange(year, mouth)
查看某年某月某日是星期幾:calendar.weekday(year, month, day)
"""""
import calendar
print(calendar.isleap(2020))         #True
print(calendar.month(2019,6))        #日曆表
print(calendar.monthrange(2019,6))   #(5, 30)
print(calendar.weekday(2019,5,7))    #1 

 

五,time 模塊

"""
 時間戳(timestamp):time.time()
 延遲線程的運行:time.sleep(secs)
(指定時間戳下的)當前時區時間:time.localtime([secs])
(指定時間戳下的)格林威治時間:time.gmtime([secs])
(指定時間元組下的)格式化時間:time.strftime(fmt[,tupletime])
"""

import  time
'''時間戳'''
# print(time.time())      #1557212208.8409944

'''延遲線程的運行'''
time.sleep(3)
print('結束了')

'''# 自定義睡覺'''
old_time = time.time()
while time.time() - old_time <= 3:
    pass

print(time.time())
print('醒了')


'''當前時區時間'''
print(time.localtime()) #time.struct_time(tm_year=2019, tm_mon=5, tm_mday=7, tm_hour=14, tm_min=59, tm_sec=32, tm_wday=1, tm_yday=127, tm_isdst=0)

time_old = time.localtime()
print(time_old)
print(time_old.tm_year)     #2019


'''格林威治時間'''
print(time.gmtime())    #time.struct_time(tm_year=2019, tm_mon=5, tm_mday=7, tm_hour=10, tm_min=44, tm_sec=56, tm_wday=1, tm_yday=127, tm_isdst=0)

time_obj2 = time.gmtime()
print(time_obj2)
print(time_obj2.tm_hour)    #10
print(time_obj2.tm_wday)    #1  星期從周一開始計算,周一為數字0

print(time.localtime(1557302208))   #將時間戳轉化成時間對象
print(time.gmtime(1557012208))      #time.struct_time(tm_year=2019, tm_mon=5, tm_mday=4, tm_hour=23, tm_min=23, tm_sec=28, tm_wday=5, tm_yday=124, tm_isdst=0)


'''格式化時間'''
res  = time.strftime('%Y-%m-%d')        #2019-05-07
print(res)

res = time.strftime("%Y-%m-%d %H:%M:%S", (2008, 8, 8, 8, 8, 8, 0, 0, 0))
print(res)

 

六,datetime 模塊

"""
當前時間:datetime.datetime.now()
昨天:datetime.datetime.now() + datetime.timedelta(days=-1)
修改時間:datetime_obj.replace([...])
格式化時間戳:datetime.date.fromtimestamp(timestamp)
"""""

import datetime

print(datetime.datetime.year)
now_time = datetime.datetime.now()
print(now_time)  # 2019-05-07 19:17:33.200227 當前時間

res = str(now_time)
print(res[:-7])  # 2019-05-07 19:19:03   時間截取

# 7天的時間對象
days = datetime.timedelta(days=7)
print(days, type(days))  # 7 days, 0:00:00 <class 'datetime.timedelta'>

# 免登陸時間運算|會員過期時間
time_obj = now_time + days  # 當前時間 + 7天
print(time_obj, type(time_obj))  # 2019-05-14 19:23:26.698641 <class 'datetime.datetime'>

now_time_obj = time_obj.replace(year=2000, day=1, second=0)
print(now_time_obj)      #2000-05-01 19:25:00.294593

print(datetime.date.fromtimestamp(1557094560))      #2019-05-06


print('=========')
print(datetime.datetime.now() +  datetime.timedelta(days=-1))  #昨天  2019-05-06 22:10:01.758706
print(datetime.datetime.now() -  datetime.timedelta(days=-1))  #明天 2019-05-08 22:10:01.758706

 

七,os 模塊

'''

 os翻譯過來就是操作系統,os模塊提供了與操作系統打交道需要用到的函數,

 那我們什麼時候需要與操作系統打交道呢?

   在操作系統中,我們最最常用的操作就是,對文件及文件夾的操作, 所以 當你需要操作文件時,就應該想到os模塊了

 os提供一下函數:


os.getcwd()         獲取當前工作目錄,即當前python腳本工作的目錄路徑
os.chdir("dirname")    改變當前腳本工作目錄;相當於shell下cd
os.curdir          返回當前目錄: ('.')
os.pardir          獲取當前目錄的父目錄字元串名:('..')
os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄
os.removedirs('dirname1') 若目錄為空,則刪除,並遞歸到上一級目錄,如若也為空,則刪除,依此類推
os.mkdir('dirname')      生成單級目錄;相當於shell中mkdir dirname
os.rmdir('dirname')     刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當於shell中rmdir dirname
os.listdir('dirname')    列出指定目錄下的所有文件和子目錄,包括隱藏文件,並以列表方式列印
os.remove()          刪除一個文件
os.rename("oldname","newname")   重命名文件/目錄
os.stat('path/filename')         獲取文件/目錄信息
os.sep             輸出操作系統特定的路徑分隔符,win下為"\\",Linux下為"/"
os.linesep          輸出當前平臺使用的行終止符,win下為"\t\n",Linux下為"\n"
os.pathsep          輸出用於分割文件路徑的字元串 win下為;,Linux下為:
os.name            輸出字元串指示當前使用平臺。win->'nt'; Linux->'posix'
os.system("bash command")    運行shell命令,直接顯示
os.environ          獲取系統環境變數

'''''

import os

print(os.sep)       #\
print(os.linesep)
print(os.name)      #nt
print(os.pathsep)   #;
print(os.environ)

os.mkdir('abc')       #在當前文件所在路徑下創建abc文件夾,如果文件存在會報錯
os.mkdir('D:\\abc')    #就是在指定的絕對路徑下創建abc文件夾

os.mkdir('a/b/c')         #a,b必須提前存在,c不能存在
os.makedirs(r'a\b\c')      #a,b存在與否都可以,c不能存在

os.rename('abc','aaa')  #修改文件名
print(os.getcwd())      #獲取工作目錄  D:\Python_Project\ClassRoom\day18

os.rmdir('aaa')        #刪除單層空文件
os.removedirs('a/b/c')  #刪除多層空文件
os.remove('aa/1.py')    #刪除指定文件

print(os.listdir('D:\Python_Project\ClassRoom\day18'))  #輸入當前目錄下的目錄  ['a', 'abc', 'calendar模塊.py', 'datetime模塊.py', 'os模塊.py', 'part5', 'sys模塊.py', 'time模塊.py']

 

八,os.path  模塊

"""

該模塊用於處理路徑,我們知道python是一門跨平臺的語言,二每種操作系統,文件路徑是截然不同的,為了使程式可以在不同平臺生正確運行,

python提供了該模塊,使用該模塊可以實現路徑在不同品臺下的自動轉換,從而實現跨平臺

  今後只要涉及到文件或文件夾路徑,就應該使用該模塊

提供的函數:


os.path.abspath(path)   返回path規範化的絕對路徑
os.path.split(path)     將path分割成目錄和文件名二元組返回
os.path.dirname(path)    返回path的目錄。其實就是os.path.split(path)的第一個元素
os.path.basename(path)   返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素
os.path.exists(path)     如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)      如果path是絕對路徑,返回True
os.path.isfile(path)     如果path是一個存在的文件,返回True。否則返回False
os.path.isdir(path)      如果path是一個存在的目錄,則返回True。否則返回False
os.path.join(path1[, path2[, ...]]) 將多個路徑組合後返回,第一個絕對路徑之前的參數將被忽略
os.path.getatime(path)  返回path所指向的文件或者目錄的最後存取時間
os.path.getmtime(path)  返回path所指向的文件或者目錄的最後修改時間
os.path.getsize(path)   返回path的大小

"""""
import os print(__file__) #當前執行文件路徑 D:/Python_Project/ClassRoom/day18/os_path模塊.py res = os.path.abspath('D://Python_Project/\ClassRoom/day18//os_path模塊.py') #規範化 print(res) res = os.path.split('D:/Python_Project/ClassRoom/day18/os_path模塊.py') print(res,res[1]) #('D:/Python_Project/ClassRoom/day18', 'os_path模塊.py') os_path模塊.py print(r'D:\Python_Project\ClassRoom\day18\os_path模塊.py'.rsplit(os.sep ,1 )) #['D:\\Python_Project\\ClassRoom\\day18', 'os_path模塊.py'] print(__file__) print(os.path.dirname(__file__)) print(os.path.dirname(os.path.dirname(__file__))) BASE_DIR = os.path.dirname(os.path.dirname(__file__)) print(BASE_DIR) #該項目根目錄是在執行時,自動獲取到當前項目根目錄的絕對路徑
#案例:項目根目錄的應用場景 import sys sys.path.append(BASE_DIR) #所有導包\導模塊都依賴BASE_DIR print(sys.path) from part3.abc import new print(new) #<module 'part5.abc.new' from 'D:/Python_Project/ClassRoom\\part5\\abc\\new.py'> from part5.x import y print(y.x) from part5 import mm print(mm.mmmm) from mm import mmmm print(mmmm)
part1_path
= os.path.join(BASE_DIR,'part1') #BASE_DIR + os.sep + 'part1' sys.path.append(part1_path) part3_path = os.path.join(BASE_DIR,'part3') sys.path.append(part3_path) print(sys.path) #最後一級名稱 print(os.path.basename('D:/Python_Project/ClassRoom/day18/os_path模塊.py')) #os_path模塊.py #路勁拼接: new_path = os.path.join(BASE_DIR,'part3','abc','new.py') print(new_path) #D:/Python_Project/ClassRoom\part3\abc\new.py """ 指定路徑是否存在:os.path.exists(path) 是否是絕對路徑:os.path.isabs(path) 是否是文件:os.path.isfile(path) 是否是路徑:os.path.isdir(path) """

print(os.path.exists(new_path)) #是否存在 print(os.path.isabs(new_path)) #是否絕對路徑 print(os.path.exists('abc')) print(os.path.isabs('abc')) print(os.path.isfile(new_path)) #是否是文件 print(os.path.isdir(new_path)) #是否是路徑 print(os.path.isfile('abc')) print(os.path.isdir('abc')) print(__file__) file_path = 'D:/Python_Project/ClassRoom/day18/os_path模塊.py' print(os.path.getctime(file_path)) print(os.path.getatime(file_path)) #最後存儲時間 print(os.path.getmtime(file_path)) #最後修改時間 ''' 1557230709.9831052 1557233680.8510375 #修改了文件會進行更新 1557233680.8540661 ''' print(os.path.normcase('D:/Python_Project/\ClassRoom/day18/os_path模塊.py')) #d:\python_project\\classroom\day18\os_path模塊.py print(os.path.normpath('D:/Python_Project/ClassRoom/day18/..')) #D:\Python_Project\ClassRoom

 

 

九,os案例 :

'''將part5下的mm.py移動到part6下abc文件中'''
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) #提取part5中的mm.py文件 file_name = os.path.split(file)[1] #第二種方式提取 file_name = os.path.basename(file) print(file_name) #mm.py #將提取出來的mm.py文件添加到part6\abc中 new_file = os.path.join(folder,file_name) print(new_file) #D:/Python_Project/ClassRoom\part6\abc\mm.py #打開文件提取內容 with open(file,'rb')as r,open(new_file,'wb')as w: for line in r: w.write(line) #將part5中的mm.py 刪除 os.remove(file) file = os.path.join(BASE_DIR,'part5','mm.py') print(file) #D:/Python_Project/ClassRoom\part5\mm.py folder = os.path.join(BASE_DIR,'part6','abc') print(folder) #D:/Python_Project/ClassRoom\part6\abc # move_file(file,folder)

'''遞歸刪除的思路''' def delete_dir(folder): for path in os.listdir(folder): # 如果path是文件夾 delete_dir(path) # 如果是文件os.remove(path) pass # for走完了代表folder內部刪空了,可以刪folder
'''#遍歷列印目標路徑中所有的txt文件''' def print_txt(folder): #判斷文件是否存在,是否是文件 if not (os.path.exists(folder) or os.path.isfile(folder)): print('文件不存在或不是文件') return #迴圈遍歷文件下的目錄 for path in os.listdir(folder): #將文件名迴圈出來添加到D:/Python_Project/ClassRoom\part6後面 file_path = os.path.join(folder,path) print(file_path) #D:/Python_Project/ClassRoom\part6\a\b #如果是文件並且以.txt結尾的,就輸出 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') # print(target_path) #D:/Python_Project/ClassRoom\part6 print_txt(target_path)

 

十,項目開發分析:

'''
1.調研
2.需求分析
3.架構師完成項目demo,完成項目架構
4.分工
5.寫代碼
6.白盒黑盒測試
7.項目審核發佈 => 項目 -> 產品
'''

'''
bin: 可執行文件,入口,入口也可以放在項目根目錄下
core: 核心代碼
db:資料庫相關文件
interface:介面
lib:包、模塊、第三方文件夾
log:日誌
setting:配置
static:靜態文件
'''

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先會看懂UML UML類圖與類的關係詳解 虛線箭頭指向依賴;實線箭頭指向關聯;虛線三角指向介面;實線三角指向父類;空心菱形能分離而獨立存在,是聚合;實心菱形精密關聯不可分,是組合; 上面是UML的語法。在畫類圖的時候,理清類和類之間的關係是重點。類的關係有泛化(Generalization)、實現 ...
  • 前言 前幾天,在食堂吃飯,本來每天中午的新聞三十分換成了視頻監控。我們已經習慣了,前十分鐘看著領導都很忙,中間十分鐘中國人民都很幸福,後十分鐘別的國家都生活在水深火熱里,順便跟同事談談國家大事。突然主角換成了我們自己,便毫無抬頭的欲望。 恰巧最近也有在接觸大屏監控的解決方案,於是乎,就索性拿樹莓派實 ...
  • 所屬網站分類: 資源下載 > python電子書 作者:today 鏈接:http://www.pythonheidong.com/blog/article/448/ 來源:python黑洞網 內容簡介 本書是對以數據深度需求為中心的科學、研究以及針對計算和統計方法的參考書。本書共五章,每章介紹一到 ...
  • 今天整理一下自己的基礎篇輸入和輸出的理解,自己沒有研究系統輸入和輸出函數,以後有時間在去深究,之前在別人的博客裡面看到這麼一句話分享給大家,“學習就是一個不斷抄襲,模仿,練習和創新的一個過程”。 使用VC2015 1.創建項目,【文件】》【新建】》【項目】 2.項目類型為【Win32控制台應用程式】 ...
  • 01 內容大綱 1. 基礎數據類型的補充 2. 數據類型之間的轉換 3. 編碼的進階 02 具體內容: 數據類型的補充: str 元組 列表 字典 數據類型的轉換 int bool str 三者轉換 str list 兩者轉換 list set 兩者轉換 str bytes 兩者轉換 所有數據都可以 ...
  • 快速排序c++實現 快排C++ 第一、演算法描述 快速排序由C. A. R. Hoare在1962年提出,該演算法是目前實踐中使用最頻繁,實用高效的最好排序演算法, 快速排序演算法是採用分治思想的演算法,演算法分三個步驟 ...
  • 你知道幾種實例化一個類的方式? new?反射?還有呢? 美麗的分割線 筆者總結了一下大概有以下六種方式: (1)通過構造方法實例化一個類; (2)通過Class實例化一個類; (3)通過反射實例化一個類; (4)通過克隆實例化一個類; (5)通過反序列化實例化一個類; (6)通過Unsafe實例化一 ...
  • 爬蟲庫 使用簡單的requests庫,這是一個阻塞的庫,速度比較慢。 解析使用XPATH表達式 總體採用類的形式 多線程 使用concurrent.future併發模塊,建立線程池,把future對象扔進去執行即可實現併發爬取效果 數據存儲 使用Python ORM sqlalchemy保存到資料庫 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...