說說在 Python 中如何處理檔案系統路徑

2021-10-02 06:49:13 字數 3686 閱讀 4619

在 windows 作業系統中,檔案路徑以倒斜槓作為資料夾之間的分隔符。但在 osx 和 linux 上,使用的則是正斜槓作為路徑分隔符。如果希望讓程式適配所有作業系統,就會用到 os.path.join() 函式。

import os

path = os.path.join('usr', 'local', 'sbin')

print(path)

執行結果:

usr\local\sbin

如果在 os x 或 linux 上呼叫這個函式, 就會返回 『usr/local/sbin』。

利用 os.getcwd() 函式,可以獲取當前當前執行環境所在路徑。而使用 os.chdir() 可以改變這個路徑。

current_path=os.getcwd()

print(current_path)

#切換當前所在路徑

os.chdir('c:\program files')

print(os.getcwd())

執行結果:

f:\python_projects\***\excel\file

c:\program files

注意:如果要更改的執行環境所在路徑不存在,就會丟擲錯誤:

os.chdir('c:\\not_exist')
執行結果:

filenotfounderror: [winerror 2] 系統找不到指定的檔案。: 『c:\not_exist』

這時,可以使用 os.makedirs() 建立所有必要的中間資料夾,確保路徑存在:

not_exist_path = 'c:\\not_exist\\1'

try:

os.chdir(not_exist_path)

except filenotfounderror:

os.makedirs(not_exist_path)

os.chdir(not_exist_path)

print(os.getcwd())

執行結果:

c:\not_exist\1

函式

說明os.path.abspath(path)

返回 path 的絕對路徑。適用於將相對路徑轉換為絕對路徑。

os.path.isabs(path)

如果 path 是絕對路徑,就返回 true;否則返回 false。

os.path.relpath(path, start)

返回從 start 路徑到 path 的相對路徑。如果沒有提供 start 引數,則使用當前執行目錄作為開始路徑。

os.path.basename(path)

返回 path 引數中最後乙個斜槓之的所有內容。

os.path.dirname(path)

返回 path 引數中最後乙個斜槓之的所有內容。

os.path.split(path)

返回路徑中的目錄與名稱元組。

os.path.exists(path)

是否存在 path 路徑。

os.path.isfile(path)

path 路徑存在,並且是檔案。

os.path.isdir(path)

path 路徑存在,並且是資料夾。

os.chdir('c:\\program files')

print(os.path.abspath('.'))

print(os.path.abspath('.\\common files'))

print(os.path.isabs('.'))

print(os.path.isabs('c:\\program files'))

執行結果:

c:\program files

c:\program files\common files

false

true

因為首先使用 os.chdir() 把當前路徑切換到了c:\\program files,所以呼叫 os.path.abspath() 時, 當前執行所在目錄是c:\\program files, 所以「 點」 的相對路徑表示法所對應的絕對路徑就是c:\\program files

print(os.path.relpath('c:\\program files','c:\\'))

print(os.path.relpath('c:\\program files','c:\\windows\\addins\\'))

執行結果:

program files

…\program files

path='c:\program files\common files\adobe\cep\extensions\logioptionsadobe\index.html'

print(os.path.basename(path))

print(os.path.dirname(path))

print(os.path.split(path))

執行結果:

index.html

c:\program files\common files\adobe\cep\extensions\logioptionsadobe

(『c:\program files\common files\adobe\cep\extensions\logioptionsadobe』, 『index.html』)

注意:如果需要返回路徑中的每一部分的名稱列表,os.path.split(path) 就不適用啦。我們可以使用 split() 方法來實現:

print(path.split(os.path.sep))
執行結果:

[『c:』, 『program files』, 『common files』, 『adobe』, 『cep』, 『extensions』, 『logioptionsadobe』, 『index.html』]

print(os.path.exists('c:\\program files'))

print(os.path.isdir('c:\\program files'))

print(os.path.isfile('c:\\program files'))

print(os.path.isfile('c:\program files\common files\adobe\cep\extensions\logioptionsadobe\index.html'))

執行結果:

true

true

false

true

日常 如何處理「火星文」亂碼

爬蟲中常常會遇到兩種亂碼,一種是中遇到的亂碼,嚴格來說這不是亂碼,這是字元編碼後的結果,而且它根本不亂,只是我們看不懂而已,但是計算機是可以輕易讀懂它是什麼意思的。第二種便是如下圖所示的情況了?奻漆桸 眥 最拸蚡這些亂碼是最近筆者在為老師爬取某就業資訊 時遇到的問題。其實之前也遇到過類似的亂碼問題,...

python如何處理異常

利用python捕獲異常的方式 方法一 捕獲所有的異常 1 2 3 4 5 6 7 8 捕獲異常的第一種方式,捕獲所有的異常 try a b b c exceptexception,data printexception,data 輸出 type exceptions.exception local...

說說在 Python 中如何使用列表推導

luciano ramalho 舉了這樣乙個示例,把乙個字串轉為 unicode 碼的列表。傳統寫法是這樣的 symbols codes for symbol in symbols 執行結果 info codes 64,35,36,37,94,38 ord 函式是 chr 函式 對於8位的ascii...