第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

os 模塊操作文件與文件夾

在日常工作中,我們經(jīng)常會(huì)和文件、文件夾打交道,比如將服務(wù)器上指定目錄下文件進(jìn)行歸檔,或?qū)⑴老x(chóng)爬取的數(shù)據(jù)根據(jù)時(shí)間創(chuàng)建對(duì)應(yīng)的文件夾 / 文件,如果這些還依靠手動(dòng)來(lái)進(jìn)行操作,無(wú)疑是費(fèi)時(shí)費(fèi)力的,這時(shí)候 Python 中的 os 模塊就必不可少了。本小節(jié)將圍繞 os 模塊的使用進(jìn)行介紹。

1. os 模塊介紹

os 模塊是 Python 中的內(nèi)置模塊,無(wú)需安裝即可使用,os 模塊提供非常豐富的方法用來(lái)處理文件和目錄。

os 模塊的使用步驟如下:

步驟 1:導(dǎo)入 os 模塊

import os

步驟 2:操作文件或者文件夾

通過(guò) os 模塊提供的方法對(duì)文件、文件夾進(jìn)行操作

2. os 模塊操作文件與文件夾

os 模塊是 Python 中操作文件與文件夾時(shí)常用的模塊,os 模塊中常用方法見(jiàn)下表。

方法名 描述
getcwd() 獲取當(dāng)前工作目錄
listdir(path) 獲取指定的文件夾包含的文件或文件夾的名字的列表
rename(src,dst) 用于文件或文件夾重命名
makedirs(path) 用于遞歸創(chuàng)建文件夾
removedirs(path) 用于遞歸刪除文件夾
remove(path) 刪除指定路徑的文件
open(file, flags[, mode]) 打開(kāi)文件
read(fd,n) 讀取指定文件
wirte(fd,str) 寫(xiě)入內(nèi)容
walk(dir) 文件、目錄遍歷器

os.path 模塊中常用方法見(jiàn)下表。

方法名 描述
os.path.exists(path) 如果路徑 path 存在,返回 True;如果路徑 path 不存在,返回 False
os.path.join(path1[, path2[, …]]) 把目錄和文件名合成一個(gè)路徑

下面來(lái)具體看下每個(gè)方法的使用:

  1. getcwd () 使用:
import os
print(os.getcwd()) #輸出:D:\code

代碼解釋:當(dāng)前代碼文件存放在 D:\code 下,導(dǎo)入 OS 模塊,使用 getcwd () 方法,獲取當(dāng)前工作目錄,打印結(jié)果為 “D:\code”,如下圖所示。

圖片描述

  1. listdir () 使用:
import os
print(os.listdir('.'))
#輸出:['dingding.py', 'image', 'index.py', 'writeppt.py', 'writeword.py']

代碼解釋:listdir () 方法可以獲取指定的文件夾包含的文件或文件夾的名字的列表,目前 D:\code 目錄下文件結(jié)構(gòu)如下圖所示。

圖片描述

通過(guò) listdir () 方法傳遞指定目錄,代碼中傳遞 “.” 表示當(dāng)前目錄,輸出結(jié)果:[‘dingding.py’, ‘image’, ‘index.py’, ‘writeppt.py’, ‘writeword.py’],如下圖所示。

圖片描述

  1. rename () 使用:
import os
os.rename("image","newimage")
os.rename("dingding.py","newdingding.py")

代碼解釋 :rename () 方法為重命名文件或文件夾,第一個(gè)參數(shù)為要重命名的文件名或文件夾名,第二個(gè)參數(shù)為修改后的名稱,上述代碼中將文件夾 “image” 重名為 “newimage”,將文件 “dingding.py” 重名為 “newdingding.py”,代碼執(zhí)行完成后,D:\code 目錄下效果如下圖所示。

圖片描述

  1. makedirs () 使用:
import os
os.makedirs("dist/src/code")

代碼解釋:makedirs () 方法用于遞歸創(chuàng)建目錄,參數(shù)即為需要遞歸創(chuàng)建的目錄,上述代碼指定 “dist/src/code”,即表示創(chuàng)建一個(gè) dist 文件夾,其中包含 src 文件夾,在 src 下包含 code 文件夾。代碼執(zhí)行完成后,D:\code 目錄下效果如下圖所示。
圖片描述

  1. removedirs () 使用:
import os
os.removedirs("dist/src/code")
print(os.listdir('.'))
#輸出:['newdingding.py', 'newimage', 'index.py', 'writeppt.py', 'writeword.py']

代碼解釋 :removedirs () 方法用于遞歸刪除目錄,參數(shù)為要遞歸刪除的目錄,上述代碼指定 “dist/src/code”,即將 dist 文件夾下 src 文件夾下 code 文件夾一并進(jìn)行刪除。執(zhí)行完刪除后,通過(guò) listdir () 方法查看當(dāng)前目錄下文件結(jié)構(gòu),輸出 [‘newdingding.py’, ‘newimage’, ‘index.py’, ‘writeppt.py’, ‘writeword.py’],可以看到已經(jīng)完成刪除操作。代碼執(zhí)行完成后,D:\code 目錄下效果如下圖所示。

圖片描述

  1. remove () 使用:
import os
os.remove("newdingding.py")
print(os.listdir('.'))
#輸出:['newimage', 'index.py', 'writeppt.py', 'writeword.py']

代碼解釋 :remove () 方法用于刪除指定文件,上述代碼中刪除 “newdingding.py” 文件,刪除完成后,通過(guò) listdir () 方法查看當(dāng)前目錄文件結(jié)構(gòu),輸出 [‘newimage’, ‘index.py’, ‘writeppt.py’, ‘writeword.py’],可以看到已經(jīng)完成刪除操作。代碼執(zhí)行完成后,D:\code 目錄下效果如下圖所示。

圖片描述

  1. open () 使用:
import os
os.open("writeppt.py",os.O_RDONLY)

代碼解釋:open () 方法用于打開(kāi)指定文件,第一個(gè)參數(shù)為要打開(kāi)的文件,第二個(gè)參數(shù)為打開(kāi)的模式,可以取值如下所示:

  • OS.O_RDONLY:以只讀的方式打開(kāi);
  • OS.O_WRONLY:以只寫(xiě)的方式打開(kāi);
  • OS.O_RDWR:以讀寫(xiě)的方式打開(kāi);
  • OS.O_NONBLOCK:打開(kāi)時(shí)不阻塞;
  • OS.O_APPEND:以追加的方式打開(kāi);
  • OS.O_CREAT:創(chuàng)建并打開(kāi)一個(gè)新文件;
  • OS.O_TRUNC:打開(kāi)一個(gè)文件并截?cái)嗨拈L(zhǎng)度為零(必須有寫(xiě)權(quán)限);
  • OS.O_EXCL:如果指定的文件存在,返回錯(cuò)誤;
  • OS.O_SHLOCK:自動(dòng)獲取共享鎖;
  • OS.O_EXLOCK:自動(dòng)獲取獨(dú)立鎖;
  • OS.O_DIRECT:消除或減少緩存效果;
  • OS.O_FSYNC:同步寫(xiě)入;
  • OS.O_NOFOLLOW:不追蹤軟鏈接。

上述代碼中,打開(kāi) writeppt.py 文件,以只讀方式打開(kāi),返回新打開(kāi)文件的描述符,可以進(jìn)行后續(xù)的讀取、寫(xiě)入操作。

  1. read () 使用:
import OS
fs=os.open("writeppt.py",OS.O_RDONLY) # fs 就是 writeppt.py 的文件描述符
print(OS.read(fs,24))

代碼解釋 :read () 方法為從文件描述符中讀取文件內(nèi)容,第一個(gè)參數(shù)為 open () 方法打開(kāi)文件返回的文件描述符,第二個(gè)參數(shù)為讀取的字節(jié)數(shù)。上述代碼中讀取 writeppt.py 文件 24 個(gè)字節(jié)內(nèi)容。代碼執(zhí)行完成后,輸出效果如下圖所示。
圖片描述

  1. write () 使用:
import os
fs=os.open("test.txt",os.O_RDWR) # fs 就是 test.txt 的文件描述符,打開(kāi)模式設(shè)置為以讀寫(xiě)的方式打開(kāi)
print(os.write(fs,"hello python")) #寫(xiě)入內(nèi)容為hello python

代碼解釋:write () 方法用于寫(xiě)入字符串到文件描述符 fs 中,第一個(gè)參數(shù)為文件描述符,第二個(gè)參數(shù)為寫(xiě)入的字符串內(nèi)容。代碼執(zhí)行完成后,輸出效果如下圖所示。

圖片描述

  1. walk () 使用:
import os
for dirpath, dirnames, filenames in os.walk("D:/code"):
	#輸出:D:/code  ['newimage'] ['index.py','test.txt','writeppt.py','writeword.py']
    print(dirpath, dirnames, filenames)

代碼解釋:os.walk () 方法是一個(gè)簡(jiǎn)單易用的文件、目錄遍歷器,接收參數(shù)為要遍歷的目錄的地址,返回的是一個(gè)三元組 (dirpath, dirnames, filenames),分別表示當(dāng)前正在遍歷的這個(gè)文件夾的本身的地址、該文件夾中所有的目錄的名字、該文件夾中所有的文件。代碼中指定目錄 D:/code,執(zhí)行時(shí)會(huì)遍歷 D 盤(pán) code 目錄下所有文件和文件夾,輸出效果如下圖所示。

圖片描述

  1. os.path.exists () 使用:
import os
print(os.path.exists("D:\\code\\index.py")) #輸出true
print(os.path.exists("D:\\code\\test.py")) #輸出False

代碼解釋 :exists () 方法判斷路徑是否存在,上面代碼中在 D 盤(pán) code 文件夾下存在 index.py,所以輸出 true,不存在 test.py,輸出 False。代碼執(zhí)行完成后,輸出效果如下圖所示。

圖片描述

  1. os.path.join () 使用:
import os
#輸出D:\code\2020\11
print(os.path.join("D:\\code\\","2020\\","11"))

代碼解釋:join () 方法用于把目錄和文件名合成一個(gè)路徑。代碼執(zhí)行完成后,輸出效果如下圖所示。

圖片描述

3. os 模塊實(shí)戰(zhàn)

在開(kāi)發(fā)中,程序遇到異常情況時(shí)需要記錄錯(cuò)誤日志文件,為便于程序員調(diào)試,通常錯(cuò)誤日志文件的目錄結(jié)構(gòu)為:當(dāng)前年的文件夾下 / 當(dāng)前月的文件夾下 / 當(dāng)前日的文件夾 / 具體的 txt 錯(cuò)誤日志文件。這時(shí)可以使用 Python 的 os 模塊封裝創(chuàng)建日志的公共方法,完成需求如下:

  1. 根據(jù)傳入的時(shí)間創(chuàng)建對(duì)應(yīng)的年、月、日文件夾,在創(chuàng)建前需要判斷文件夾是否存在,存在則不作操作
  2. 根據(jù)傳入的內(nèi)容,創(chuàng)建 txt 錯(cuò)誤日志文件,當(dāng)重復(fù)調(diào)用時(shí),txt 錯(cuò)誤日志文件內(nèi)容為追加

根據(jù)上述需求背景,封裝后的代碼如下:

import os
import datetime

# 獲取到當(dāng)前年
year_time = datetime.datetime.now().year
# 獲取到當(dāng)前月
month_time = datetime.datetime.now().month
# 獲取到當(dāng)前日
daytime = datetime.datetime.now().day

# 生成錯(cuò)誤日志文件
def createError(message):
    path = os.getcwd()+"\\"+str(year_time)+"\\"+str(month_time)+"\\"+str(daytime)
    # 文件路徑是否存在
    ispath = os.path.exists(path)
    # 判斷文件是否存在:不存在創(chuàng)建
    if not ispath:
        os.makedirs(path)
    # 寫(xiě)入異常到錯(cuò)誤日志文件(log.txt)
    writeError(path, message)
# 寫(xiě)入異常到錯(cuò)誤日志文件
def writeError(path, message):
    fs = os.open(path+"\\log.txt", os.O_RDWR | os.O_CREAT)
    os.write(fs, message.encode('utf-8'))
# 模擬調(diào)用
createError("SQL語(yǔ)句異常")

代碼解釋:代碼中封裝了兩個(gè)方法分別為 createError () 方法和 writeError () 方法,用于生成錯(cuò)誤日志存放文件夾及像 log.txt 寫(xiě)入錯(cuò)誤日志內(nèi)容。年月日文件夾使用 datetime 模塊獲取當(dāng)前系統(tǒng)的年、月、日,使用 exists () 方法判斷指定路徑是否存在,返回布爾值,存在則返回 true。

如果不存在則通過(guò) os 模塊下的 makedirs () 方法進(jìn)行創(chuàng)建。文件夾創(chuàng)建完成后,調(diào)用 writeError () 方法寫(xiě)入錯(cuò)誤內(nèi)容,首先使用 open () 方法打開(kāi) log.txt 文件,打開(kāi)模式設(shè)置為讀寫(xiě)和創(chuàng)建,通過(guò) write () 方法寫(xiě)入錯(cuò)誤內(nèi)容到 log.txt。代碼執(zhí)行完成后,輸出效果如下圖所示:

圖片描述

圖片描述

4. 小結(jié)

本節(jié)課程我們主要學(xué)習(xí)了 os 模塊的使用。本節(jié)課程的重點(diǎn)如下:

  • 了解 os 模塊作用及使用步驟;
  • 掌握 os 模塊中操作文件與文件夾的使用方法。

圖片描述