日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python四大模塊文件管理介紹_python

作者:A-L-Kun ? 更新時間: 2022-11-13 編程語言

一、os模塊

1、方法大綱

2、常用方法

方法 描述
getcwd() 獲取當前工作目錄
chdir(path) 將當前的工作目錄更改為指定的路徑
listdir(path=None) 列出指定目錄中的文件名。如果 path 為 None,則使用 path=‘.’。
mkdir(path, mode=511, *, dir_fd=None) 創建目錄
makedirs(name, mode=511, exist_ok=False) 遞歸創建多層目錄
rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None) 重命名文件或目錄
remove(path, *, dir_fd=None) 刪除文件
rmdir(path, *, dir_fd=None) 刪除目錄
removedirs(name) 遞歸刪除目錄,從子目錄到父目錄逐層嘗試刪除,遇到目錄非空拋出異常。
walk(top, topdown=True, onerror=None, followlinks=False) 遍歷 top 路徑下的所有子目錄,返回一個包含 3 個元素的元組:(dirpath, dirnames, filenames)。
os.curdir 指代當前目錄(‘.’)
os.pardir 指代上一級目錄(‘…’)
os.sep 路徑分割符(Windows 為 ‘\’,Linux 為 ‘/’)
os.linesep 行終止符(Windows 為 ‘\r\n’,Linux 為 ‘\n’)
os.name 指代當前使用的操作系統(Windows 系統為 ‘nt’,Linux 為 ‘posix’)

二、glob模塊

1、方法大綱

glob模塊也是Python標準庫中一個重要的模塊,主要用來查找符合特定規則的目錄和文件,并將搜索的到的結果返回到一個列表中。使用這個模塊最主要的原因就是,該模塊支持幾個特殊的正則通配符,用起來賊方便,這個將會在下方為大家進行詳細講解。

2、使用示例

import glob
path1 = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_a\[0-9].png"
print(glob.glob(path1))
path2 = r"C:\Users\黃偉\Desktop\publish\os模塊\test_shutil_a\[0-9a-z].*"
print(glob.glob(path2))

注意:這個函數里面還有一個參數,recursive,當其為真時,則模式’**'將與任何文件匹配,并且

零或更多目錄和子目錄。

三、shutil模塊

1、方法大綱

os模塊是Python標準庫中一個重要的模塊,里面提供了對目錄和文件的一般常用操作。而Python另外一個標準庫——shutil模塊,它作為os模塊的補充,提供了復制、移動、刪除、壓縮、解壓等操作,這些 os 模塊中一般是沒有提供的。但是需要注意的是:shutil模塊對壓縮包的處理是調用ZipFileTarFile這兩個模塊來進行的。

2、壓縮包

對壓縮包管理是使用zipfile模塊

import zipfile
import os
file_list = os.listdir(os.getcwd())  # 獲取當前目錄
# 將上述所有文件,進行打包,使用“w”
with zipfile.ZipFile(r"我創建的壓縮包.zip", "w") as zipobj:  # 對文件進行壓縮
    for file in file_list:
        zipobj.write(file)  # 將文件寫入壓縮包中

四、pathlib模塊

1、對比圖

操作 os and os.path pathlib
絕對路徑 os.path.abspath Path.resolve
修改權限 os.chmod Path.chmod
創建目錄 os.mkdir Path.mkdir
重命名 os.rename Path.rename
移動 os.replace Path.replace
刪除目錄 os.rmdir Path.rmdir
刪除文件 os.remove, os.unlink Path.unlink
工作目錄 os.getcwd Path.cwd
是否存在 os.path.exists Path.exists
用戶目錄 os.path.expanduser Path.expanduser and Path.home
是否為目錄 os.path.isdir Path.is_dir
是否為文件 os.path.isfile Path.is_file
是否為連接 os.path.islink Path.is_symlink
文件屬性 os.stat Path.stat, Path.owner, Path.group
是否為絕對路徑 os.path.isabs PurePath.is_absolute
路徑拼接 os.path.join PurePath.joinpath
文件名 os.path.basename PurePath.name
上級目錄 os.path.dirname PurePath.parent
同名文件 os.path.samefile Path.samefile
后綴 os.path.splitext PurePath.suffix

2、路徑獲取

獲取當前工作目錄

import pathlib
print(pathlib.Path.cwd())  # 雖然在這里打印出來的很像一個字符串,但實際上得到的是一個WindowsPath對象
# 其實現了 __repr__ 和 __str__ 底層方法
print(pathlib.Path(__file__))  # 獲取當前文件路徑

工作目錄是在哪個目錄下運行你的程序,不是項目目錄

獲取家目錄

import pathlib
print(pathlib.Path.home())  # 獲取當前用戶的家目錄

獲取文件絕對路徑

from pathlib import Path
# 當前文件路徑
p = Path(__file__)
print(p)  
print(p.absolute())  # 將路徑轉換為絕對路徑,p.resolve()功能也是一樣的

遍歷當前目錄

from pathlib import Path
# 當前文件路徑
p = Path('files')
for i in p.iterdir():
    print(i.absolute())

"""運行結果:
C:\Users\3500\PycharmProjects\untitled3\demo\files\json
C:\Users\3500\PycharmProjects\untitled3\demo\files\username.txt
C:\Users\3500\PycharmProjects\untitled3\demo\files\yaml
"""

3、文件屬性

from pathlib import Path
# 當前文件路徑
p = Path(__file__)
print(p.absolute())   # 獲取絕對路徑
print(p.resolve())    # 獲取絕對路徑
print(p.name)   # 獲取文件名稱 'test.py'
print(p.stem)    # 只要文件名,不要后綴 test
print(p.suffix)  # 獲取文件 后綴.py
print(p.suffixes)  # 文件所有的后綴 ['.py']
print(p.parts)  # 拆分('C:\\', 'Users', '3500', 'PycharmProjects', 'untitled3', 'demo', 'test.py')
print(p.parent)  # 獲取當前路徑的父級目錄,C:\Users\35000\PycharmProjects\untitled3\demo
print(p.parent.parent)  # C:\Users\3500\PycharmProjects\untitled3
print(p.parents)  # 所有的父級 <WindowsPath.parents>
print(p.anchor)  # 錨,目錄前面的部分 C:\ 或者 /

4、文件判斷

from pathlib import Path
# 1.  is_file() 判斷是不是文件
print(Path.cwd().is_file())  # False
# 2.  is_dir() 判斷是不是文件夾
print(Path.cwd().is_dir())  # True
# exists() 判斷文件是否存在
p = Path('./data.json')
print(p.exists())  # True or False
from pathlib import Path
# 當前文件路徑
p = Path(__file__)  # 獲取當前文件的路徑
print(p.is_absolute())  # True

5、路徑拼接

from pathlib import Path
# 當前文件路徑
p = Path('./')
print(p.absolute())  # C:\Users\3500\PycharmProjects\untitled3\demo
print(p.joinpath('data.json'))  # data.json
print(p.joinpath('data.json').absolute())   # C:\Users\3500\PycharmProjects\untitled3\demo\data.json
# 拼接多層
print(p.joinpath('files', 'data.json'))   # files\data.json
print(p.joinpath('files', 'data.json').absolute())  # C:\Users\3500\PycharmProjects\untitled3\demo\files\data.json

6、正則匹配

使用模式匹配(正則表達式)匹配指定的路徑。glob 只會匹配當前目錄下, rglob 會遞歸所有子目錄

比如在當前腳本的 files 目錄有以下文件夾和子文件

from pathlib import Path
p = Path('files')
# glob 只會遍歷查找當前目錄
print(p.glob('*.txt'))  # <generator object Path.glob at 0x000001A44565A518>
print([i for i in p.glob('*.txt')])  # [WindowsPath('files/username.txt')]
print([i for i in p.glob('*.yml')])  # []
# rglob 只會遍歷查找當前目錄以及其子目錄
print(p.rglob('*.txt'))  # <generator object Path.glob at 0x000001A44565A518>
print([i for i in p.rglob('*.txt')])  # [WindowsPath('files/username.txt')]
print([i for i in p.rglob('*.yml')])  # [WindowsPath('files/yaml/aa.yml'), WindowsPath('files/yaml/bb.yml')]
p_ = Path('data.json')
# math 檢查匹配規則
print(p_.match('*.json'))  # True

7、讀寫操作

pathlib 對讀取和寫入進行了簡單的封裝,不再需要重復去打開文件和管理文件的關閉了。

  1. .read_text() 讀取文本
  2. .read_bytes() 讀取 bytes
  3. .write_text() 寫入文本
  4. .write_bytes() 寫入 tytes
from pathlib import Path
p = Path('yo.txt')
p.write_text("hello world")
print(p.read_text())  # hello world

file.write 操作使用的是 w 模式,如果之前已經有文件內容,將會被覆蓋。

當然,pathlib還可以進行文件的創建,刪除,以及修改操作,其與os中的方法一樣,可以自行去研究

原文鏈接:https://blog.csdn.net/qq_62789540/article/details/126445344

欄目分類
最近更新