從Python中os模組中實用的檔案和目錄操作方法到Python內建變數
Python常用檔案和目錄操作函式
序號 | 方法及描述 |
---|---|
1 | 檢驗許可權模式 |
2 | 改變當前工作目錄 |
4 | 更改許可權 |
5 | 更改檔案所有者 |
6 | 改變當前程序的根目錄 |
7 | 關閉檔案描述符 fd |
8 | os.closerange(fd_low, fd_high) 關閉所有檔案描述符,從 fd_low (包含) 到 fd_high (不包含), 錯誤會忽略 |
11 | 通過檔案描述符改變當前工作目錄 |
12 | 改變一個檔案的訪問許可權,該檔案由引數fd指定,引數mode是Unix下的檔案訪問許可權。 |
13 | 修改一個檔案的所有權,這個函式修改一個檔案的使用者ID和使用者組ID,該檔案由檔案描述符fd指定。 |
14 | 強制將檔案寫入磁碟,該檔案由檔案描述符fd指定,但是不強制更新檔案的狀態資訊。 |
15 | os.fdopen(fd[, mode[, bufsize]]) 通過檔案描述符 fd 建立一個檔案物件,並返回這個檔案物件 |
19 | 強制將檔案描述符為fd的檔案寫入硬碟。 |
20 | 裁剪檔案描述符fd對應的檔案, 所以它最大不能超過檔案大小。 |
21 | 返回當前工作目錄 |
22 | 返回一個當前工作目錄的Unicode物件 |
28 | 返回path指定的資料夾包含的檔案或資料夾的名字的列表。 |
33 | 遞迴資料夾建立函式。像mkdir(), 但建立的所有intermediate-level資料夾需要包含子資料夾。 |
35 | 以數字mode的mode建立一個名為path的資料夾.預設的 mode 是 0777 (八進位制)。 |
38 | 開啟一個檔案,並且設定需要的開啟選項,mode引數是可選的 |
43 | 從檔案描述符 fd 中讀取最多 n 個位元組,返回包含讀取位元組的字串,檔案描述符 fd對應檔案已達到結尾, 返回一個空字串。 |
45 | 刪除路徑為path的檔案。如果path 是一個資料夾,將丟擲OSError; 檢視下面的rmdir()刪除一個 directory。 |
46 | 遞迴刪除目錄。 |
47 | 重新命名檔案或目錄,從 src 到 dst |
48 | 遞迴地對目錄進行更名,也可以對檔案進行更名。 |
49 | 刪除path指定的空目錄,如果目錄非空,則丟擲一個OSError異常。 |
56 | 返回唯一的路徑名用於建立臨時檔案。 |
57 | 返回一個開啟的模式為(w+b)的檔案物件 .這檔案物件沒有資料夾入口,沒有檔案描述符,將會自動刪除。 |
58 | 為建立一個臨時檔案返回一個唯一的路徑 |
60 | 刪除檔案路徑 |
61 | 返回指定的path檔案的訪問和修改的時間。 |
63 | 寫入字串到檔案描述符 fd中. 返回實際寫入的字串長度 |
64 | 獲取檔案的屬性資訊。 |
重點關注:
常用函式如下:
os.getcwd() #返回當前工作目錄,即cmd或終端中目錄,而不是python命令或者執行py檔案所在的位置。
os.chdir(path) #改變當前工作目錄
os.path.abspath(path) #獲取當前當前檔案的絕對路勁
os.path.dirname() #獲取當前檔案上一層目錄
os.path.basename(a) #獲取檔名稱
os.path.abspath()返回絕對路徑,但不處理符號連結(注意linux中的符號連結不同於windows中的快捷方式)
os.path.realpath()先處理路徑中的符號連結,再返回絕對路徑。
返回指定檔案的標準路徑,而非軟連結所在的路徑 Return the canonical path of the specified filename, eliminating any symbolic links encountered in the path.
在開發過程中,如果想要獲取當前資料夾路徑有兩種方式:
常用的是
(1)
import os
print(os.getcwd())
這種方法在當工作目錄變化會發生變化,不夠穩定。
(2)
import os
print(os.path.dirname(os.path.abspath(__file__))) #列印當前檔案的絕對路勁,獲取當前檔案上一層目錄
這種方法測試是穩定的。
Python內建全域性變數
我們知道python自帶一些內建的全域性變數,比如__name__,__file__等。(注意:直接在終端中執行無__file__變數)。
在python中vars()函式可以檢視內建全域性變數,以字典方式返回內建全域性變數。
#!/usr/bin/env python
# -*- coding:utf8 -*-
print(vars())
#輸出
# {'__builtins__': <module 'builtins' (built-in)>, '__spec__': None, '__package__': None, '__doc__': None, '__name__': '__main__', '__cached__': None, '__file__': 'H:/py/index.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000000AC32C66A58>}
__doc__ :獲取檔案的註釋
#!/usr/bin/env python
# -*- coding:utf8 -*-
"""
這裡是檔案的註釋
"""
print(__doc__) #__doc__ :獲取檔案的註釋
#輸出
# 這裡是檔案的註釋
__file__ 【重點】獲取當前檔案的路徑
#!/usr/bin/env python
# -*- coding:utf8 -*-
print(__file__) #__file__ :獲取當前檔案的路徑
#輸出
# H:/py/index.py
__package__ :獲取匯入檔案的路徑,多層目錄以點分割,注意:對當前檔案返回None
#!/usr/bin/env python
# -*- coding:utf8 -*-
print(__package__) #注意:對當前檔案返回None
from lib.ska import mk #匯入mk模組檔案
print(mk.__package__) #__package__ :獲取匯入檔案的路徑,多層目錄以點分割,注意:對當前檔案返回None
#輸出
# None
# lib.ska
# lib.ska
__cached__ :獲取匯入檔案的快取路徑
#!/usr/bin/env python
# -*- coding:utf8 -*-
from lib.ska import mk #匯入mk模組檔案
print(mk.__cached__) #__cached__ :獲取匯入檔案的快取路徑
#輸出
# H:\py\lib\ska\__pycache__\mk.cpython-35.pyc
__name__ 【重點】獲取匯入檔案的路徑加檔名稱,路徑以點分割,注意:獲取當前檔案返回__main__
#!/usr/bin/env python
# -*- coding:utf8 -*-
print(__name__) #注意:獲取當前檔案返回__main__
from lib.ska import mk #匯入mk模組檔案
print(mk.__name__) #獲取匯入檔案的路徑加檔名稱,路徑以點分割
#輸出
# __main__
# lib.ska.mk
為了區分 主執行程式碼和被呼叫檔案,Python引入了變數:__name__。
1)當檔案是被呼叫時,__name__的值為模組名;
2)當檔案被執行時,__name__的值為 ‘__main__’。
__name__ 全域性變數寫在入口檔案裡,只有執行入口檔案時的返回值才是__main__ ,如果入口檔案被匯入到別的檔案裡,此時入口檔案的__name__返回值就不在是__main__,而是如果檔案的路徑加入口檔名稱,所以我們可以用__name__全域性變數來防止別人盜鏈入口檔案。
__builtins__ 【重點】內建函式在這裡面
附錄:
在python中,檢視內建函式、內建常量
import builtins
print(dir(builtins))
檢視關鍵字
import keyword
print(keyword.kwlist)