首頁 > 軟體

Python檔案相關操作和方法彙總大全

2022-08-01 18:01:40

前言:

 Python中有多個內建模組來操作檔案與目錄(os、os.path、shutil、pathlib等等)。

os.path

os.path模組主要用於獲取檔案的屬性,包含以下幾種常用方法:

路徑操作:

print(os.path.splitext('.info'))	# ('.info', '')
print(os.path.splitext('test.txt'))	# ('test', '.txt')
print(os.path.splitext(r'c:tmptest.txt'))	# ('c:\tmp\test', '.txt')

屬性操作:

方法說明
getatime(path)返回最近存取時間(浮點型秒數)
getmtime(path)返回最近檔案修改時間
getctime(path)返回檔案建立時間
getsize(path)返回檔案大小,如果檔案不存在就返回錯誤

檔案型別判斷:

方法說明
isfile(path)判斷路徑是否為檔案
isdir(path)判斷路徑是否為目錄
islink(path)判斷路徑是否為連結
ismount(path)判斷路徑是否為掛載點

檔案

檔案讀寫

Python中讀寫檔案非常簡單,只需通過open函數以合適的方式開啟,然後即可操作。

with open('data.txt', 'r', encoding='utf-8') as f:
    data = f.read()
    print('contents: {}'.format(data))

open()用於開啟一個檔案,並返回檔案物件(開啟失敗會丟擲 OSError異常);檔案物件不再使用時,一定要關閉(可用with語句保證自動關閉)。

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

引數說明:

  • file: 檔案路徑(相對或者絕對路徑)或檔案控制程式碼(interger)。
  • mode: 檔案開啟模式(預設是r)。
  • buffering: 設定緩衝(0:關閉緩衝;1:只對文字檔案有效,設定行緩衝;其他:設定緩衝的位元組數)。
  • encoding: 設定編解碼模式(只對文字模式有效,如’utf-8’)。
  • errors: 設定編解碼的報錯級別:
    • strict:預設,編解碼出錯時,丟擲ValueError異常;
    • ignore:忽略編解碼錯誤(可能會丟失資料);
    • replace:使用替換標識(如’?')替代無效資料;
    • surrogateescape:使用私有區編碼(U+DC80 to U+DCFF)來替換錯誤位元組;在處理未知編碼檔案時有效;
    • xmlcharrefreplace:寫檔案有效;錯誤位元組被替換為XML字元(&#nnn;);
    • backslashreplace:使用Python’s backslashed escape sequences替換錯誤位元組;
    • namereplace: 寫檔案有效;錯誤位元組被替換為N{...}
  • newline: 文字檔案有效,如何處理換行符
  • closefd: 使用檔案控制程式碼時,是否關閉;使用檔案路徑時,必須為True;

開啟模式Mode(t:文字;b:二進位制):

檔案物件的操作函數:

檔案刪除

刪除檔案可以:

  • os.remove()/os.unlink()
  • pathlib.Path.unlink()如果傳遞的不是檔案,則會丟擲OSError異常。

檔案複製移動

複製檔案:

  • shutil.copy(src, dst):把檔案src複製到dst中指定的位置(若dst是檔案,則該檔案的內容將替換為src的內容;若dst是目錄,則src將被複制到該目錄中);
  • shutil.copy2():會保留檔案的詳細資訊;

移動檔案:

  • os.rename(src, dst):重新命名檔案;
  • shutil.move(src,dst):將檔案移動到指定的位置。

目錄

建立目錄

有多種建立目錄的方法:

方法描述
os.mkdir()建立單個子目錄
os.makedirs()建立多次目錄,包括中間目錄
Pathlib.Path.mkdir()建立單個或多個目錄

os.makedirs(name, mode=0o777, exist_ok=False)
若目錄已存在,則丟擲FileExistsError異常;
傳遞exist_ok=True,則目錄存在時,不報錯。

刪除目錄

有以下刪除目錄的函數:

函數描述
os.rmdir()刪除一個空目錄
pathlib.Path.rmdir()刪除一個空目錄
shutil.rmtree()刪除完整的目錄樹,可用於刪除非空目錄

rmdir在目錄不為空,則引發OSError異常。

複製目錄

  • shutil.copytree()複製整個目錄及其子檔案、目錄。
  • shutil.move(src,dst):將檔案或目錄移動到指定的位置。
  • os.rename(src, dst):重新命名檔案或目錄;
    • Windows下,若dst存在則丟擲FileExistsError異常;
    • Unix下,若src與dst不同時為檔案或目錄會丟擲IsADirectoryError/NotADirectoryError異常;重新命名目錄時,若dst非空,則丟擲OSError異常。 列舉目錄

列舉目錄

列表,可通過:

  • os.scandir():推薦方法;返回一個包含DirEntry迭代器;
  • pathlib.Path()物件的iterdir()方法:返回包含目錄物件的迭代器;
  • os.listdir():遺留方法;返回一個包含子檔案(夾)名的列表;
with os.scandir('/tmp') as entries:
    for en in entries:
        if en.is_file():
            print(en.name)

DirEntry屬性與方法:

  • name:檔名
  • path:完整路徑名
  • is_dir():是資料夾,返回
  • True;is_file():是檔案,返回
  • True;is_symlink():是symbolic link,返回True;
  • stat():返回檔案屬性資訊stat_result

遍歷(遊走)目錄

os.walk()用於通過在目錄樹中游走輸出目錄中的檔名:
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

  • top:要開始遍歷的頂層目錄;
  • topdown:True,優先遍歷top目錄;False,優先遍歷子目錄;
  • onerror:當walk出錯時,呼叫的callable函數;
  • followlinks:是否遍歷軟連線;返回為一個三元組(root,dirs,files):
  • root:當前正在遍歷的這個資料夾(路徑)
  • dirs:當前目錄下所有目錄名列表;
  • files:當前目錄下所有檔名列表;
for root, dirs, files in os.walk(r"D:temp"):
    print(root, files)

# D:temp ['add.log', 'out.yml']
# D:temppicture ['1.jpeg']
# D:tempresultlog ['1.log', '2.log']

檔名模式匹配

獲取目錄列表後,要搜尋和特定的模式匹配的檔案:

fnmatch

nmatch模組主要用於檔名稱的匹配,比簡單的字串匹配更強大,但比正規表示式稍弱。

fnmatch支援使用如下幾個萬用字元:

  • *:可匹配0或多個任意字元。
  • ?:可匹配一個任意字元。
  • [字元序列]:可匹配字元序列中的任意字元;支援中畫線表示法,如 [a-c]表示a、b和c字元中任意一個。
  • [!字元序列]:可匹配不在字元序列中的任意字元。
for name in os.listdir('/tmp'):
    if fnmatch.fnmatch(name, 'log-*.txt'):
        print(name)

glob

glob模組中的glob()返回所有匹配的檔案路徑列表;iglob()與glob基本相同,只是返回的是迭代器(非列表)。
glob.glob(pathname, *, recursive=False)

引數說明:

  • pathname:是要匹配的路徑pattern,可支援萬用字元* ? []
  • recursive:若為True,則pattern中的**會匹配零或多層目錄及子目錄。

如獲取當前目錄及其子目錄下的所有py檔案:

# files = glob.iglob(r"D:temp***.log", recursive=True)
files = glob.iglob(r"***.py", recursive=True)
for f in files:
    print(f)

## 返回檔案中包含匹配的路徑;
# log的返回為:
    # D:tempadd.log
    # D:tempresultresult.log
    # D:tempresultlogtest2022.log
# py的返回為
    # main.py
    # filesfile_handle.py

臨時檔案與目錄

tempfile模組用於建立臨時檔案和目錄(程式停止執行後會自動刪除這些臨時檔案),建立位置依次為:

  • Windows下:C:TEMPC:TMP,當前目錄;
  • 其他系統:/tmp/var/tmp/usr/tmp,當前目錄;
with tempfile.TemporaryFile('w+t') as fp:
   fp.write('Hello world!')
   fp.seek(0)
   fp.read()
# 此處,檔案已被刪除

tmp = ''
with tempfile.TemporaryDirectory() as tmpdir:
    print('Created temporary directory ', tmpdir)
    tmp = tmpdir
    print(os.path.exists(tmpdir))
# 此處,目錄已被刪除

到此這篇關於Python檔案相關操作和方法彙總大全的文章就介紹到這了,更多相關Python檔案操作內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com