Python中的路徑

轉義

windows路徑使用的是\,linux路徑使用的是/。

特別的,在windows系統中如果有這樣的一個路徑 D:\nxxx\txxx\x1,程序會報錯。因爲在路徑中存在特殊符 \n(換行符)和\t(製表符),Python解釋器無法自動區分。

所以,在windows中編寫路徑時,一般有兩種方式:

  • 加轉義符,例如:"D:\\nxxx\\txxx\\x1"

  • 路徑前加r,例如:r"D:\nxxx\txxx\x1"

程序當前路徑

項目中如果使用了相對路徑,那麼一定要注意當前所在的位置。

例如:在/Users/wupeiqi/PycharmProjects/CodeRepository/路徑下編寫 demo.py文件

with open("a1.txt", mode='w', encoding='utf-8') as f:
    f.write("你好呀")

用以下兩種方式去運行:

  • 方式1,文件會創建在 /Users/wupeiqi/PycharmProjects/CodeRepository/ 目錄下。

    cd /Users/wupeiqi/PycharmProjects/CodeRepository/
    python demo.py
  • 方式2,文件會創建在 /Users/wupeiqi目錄下。
    cd /Users/wupeiqi
    python /Users/wupeiqi/PycharmProjects/CodeRepository/demo.py

文件和路徑相關

os:獲取路徑、路徑拼接、判斷路徑是否存在、創建文件夾、判斷是否是文件夾\文件

shutil:刪除、複製、移動

import shutil
import os

# 1. 獲取當前腳本絕對路徑
path_1 = os.path.abspath(__file__)
print(path_1)  # D:\python_DM\筆記\路徑.py

# 2. 獲取當前腳本的上一級   獲取上上級目錄
base_path = os.path.dirname(path_1)
print(base_path)  # D:\python_DM\筆記
base_path_base = os.path.dirname(base_path)
print(base_path_base)  # D:\python_DM

# 3. 路徑拼接 join(base, p1, p2, p3,........)
p1 = os.path.join(base_path, "多線程和多進程", "threading_event.py")
print(p1)
p2 = os.path.join(base_path, "haha")
print(p2)

# 4. 判斷路徑是否存在
exists1 = os.path.exists(p1)
exists2 = os.path.exists(p2)
print(exists1)
print(exists2)

# 5. 創建文件夾  os.makedirs(路徑) 會遞歸創建文件夾,不會創建文件
path = os.path.join(base_path, "nihao", "haha", "txt.txt")
if not os.path.exists(path):
    os.makedirs(path)  # 創建的txt.txt是一個文件夾,並不是一個文件

# 6. 判斷是否是文件夾  判斷依據:根據路徑去尋找文件夾是否存在,如果存在,再去判斷是不是文件夾,否則直接False
# 判斷是否是文件:os.path.isfile(路徑)    判斷依據與判斷文件相同
path = os.path.join(base_path, "nihao", "haha", "txt.txt")
is_dir = os.path.isdir(path)
print(is_dir)

path = os.path.join(base_path, "nihao", "haha", "txtx.txt")
is_dir = os.path.isdir(path)
print(is_dir)

# 7. 刪除文件或文件夾
path = os.path.join(base_path, "nihao", "haha", "txtx.txt")
if os.path.exists(path):
    os.remove(path)  # 只能刪除文件,如果文件不存在則會報錯

path = os.path.join(base_path, "nihao")
if os.path.exists(path):
    shutil.rmtree(path)  # 刪除文件夾,可以刪除所有子目錄和目錄下的文件,如果文件夾不存在則會報錯

# 8. 拷貝文件夾 只能拷貝文件,如果文件存在,則會報錯,如果新路徑不存在,則會創建
path = os.path.join(base_path, "多線程和多進程")
path1 = os.path.join(base_path, "Socket通信1")  # 拷貝後的文件名爲"Socket通信1"
shutil.copytree(path, path1)
path1 = os.path.join(base_path, "Socket通信", "nihao123", "haha")  # 拷貝後的文件名爲"nihao"
shutil.copytree(path, path1)


# 9.拷貝文件  如果拷貝文件時,文件夾不存在,則會報錯
path = os.path.join(base_path, "多線程和多進程", "threading_event.py")
path1 = os.path.join(base_path, "Socket通信")  # 拷貝後的文件名爲"threading_event.py"
shutil.copy(path, path1)

path1 = os.path.join(base_path, "Socket通信", "nihao.py")  # 拷貝後的文件名爲"nihao.py"
shutil.copy(path, path1)

# 10.文件或文件夾重命名(或者叫移動)  移動時,如果移動後的路徑不存在,則會報錯
path1 = os.path.join(base_path, "Socket通信", "test1.py")
# path2 = os.path.join(base_path, "nihao1", "nihao") # 路徑不存在,在移動時,程序報錯
# path2 = os.path.join(base_path, "nihao1") # 移動後文件的名字爲nihao1,不知道時什麼格式的文件
# path2 = os.path.join(base_path, "nihao1.py") # 移動後文件的名字爲nihao1.py
path2 = os.path.join(base_path) # 移動後文件的名字爲test1.py
shutil.move(path1, path2)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章