天天看點

Python檔案及目錄處理方法

Python可以用于處理文本檔案和二進制檔案,比如建立檔案、讀寫檔案等操作。本文介紹Python處理目錄以及檔案的相關方法。 ​​​​

​下面先來介紹python目錄處理相關方法。

目錄操作

1. 擷取目前代碼路徑

test_folder.py

import os
import sys
print(__file__)
print(sys.argv[0])
print(os.path.realpath(__file__))
print(os.path.abspath(sys.argv[0])      

Out:

D:/ProgramWorkspace/PythonNotes/03-File-Handling/test_folder.py
D:/ProgramWorkspace/PythonNotes/03-File-Handling/test_folder.py
D:\ProgramWorkspace\PythonNotes\03-File-Handling\test_folder.py
D:\ProgramWorkspace\PythonNotes\03-File-Handling\test_folder.p      

2. 擷取目前檔案​

​__file__​

​的所在目錄

print(os.getcwd())
print(os.path.dirname(os.path.realpath(__file__)))
print(os.path.split(os.path.realpath(__file__))[0])
path = os.path.dirname(os.path.realpath(__file__)      

Out:

D:\ProgramWorkspace\PythonNotes\03-File-Handling
D:\ProgramWorkspace\PythonNotes\03-File-Handling
D:\ProgramWorkspace\PythonNotes\03-File-Handlin      

3. 擷取目前檔案名名稱

print(os.path.basename(sys.argv[0])) # 目前檔案名名稱
print(os.path.basename(__file__)      

Out:

test_folder.py
test_folder.p      

4. 拼接路徑

path = os.path.dirname(os.path.realpath(__file__))
filename = os.path.basename(__file__)
abspath = os.path.join(path, filename)
print(abspath      

Out:

D:\ProgramWorkspace\PythonNotes\03-File-Handling\test_folder.p      

5. 建立目錄

判斷目錄是否存在:

os.path.exists(path      

建立目錄

if not os.path.exists(path): 
    print(f"建立檔案夾: {path}")
    os.makedirs(path      

檔案操作

1. 建立文本檔案

text = "Hello World!"
newfilepath = os.path.join(path, "newfile.txt")
file = open(newfilepath, 'w')
file.write(text)  # 寫入内容資訊
file.close(      

2. 判斷檔案是否存在

print(os.path.isfile(path)) 
print(os.path.isfile(newfilepath))
print(os.path.exists(newfilepath)      

Out:

False
True
Tru      

​os.path.isfile​

​ 用于判斷是否為檔案且是否存在,​

​os.path.exists​

​ 也可以用于判斷檔案是否存在,但還是建議使用​

​os.path.isfile​

​ 判斷檔案,​

​os.path.exists​

​ 判斷目錄是否存在。比如,某個檔案為newfile,使用這兩個方法都會傳回True,無法判斷到底是檔案還是目錄。

3. 判斷檔案屬性

print(os.access(newfilepath,os.F_OK)) # 檔案是否存在
print(os.access(newfilepath,os.R_OK)) # 檔案是否可讀
print(os.access(newfilepath,os.W_OK)) # 檔案是否可以寫入
print(os.access(newfilepath,os.X_OK)) # 檔案是否有執行權      

Out:

True
True
True
Tru      

​os.access(newfilepath,os.F_OK)​

​ 也可以用于判斷檔案是否存在。

4. 打開檔案

打開文本檔案或者二進制檔案可以使用 ​

​open()​

​ 方法:

f = open(filename, mode      

幾種檔案打開模式:

  • ​b​

    ​:二進制模式
  • ​t​

    ​:文本模式(預設)
  • ​r​

    ​: 打開存在的檔案,讀操作(預設)。
  • ​w​

    ​: 打開檔案,寫操作,先前檔案中的内容會被删除。如果檔案不存在會自動建立。
  • ​a​

    ​: 打開檔案,追加操作,不會删除先前檔案中的内容。如果檔案不存在會自動建立。
  • ​x​

    ​:建立新檔案,寫操作,使用此模式打開存在的檔案會抛出異常。
  • ​r+​

    ​: 讀、寫操作,不會删除先前檔案中的内容,但是會覆寫内容。
  • ​w+​

    ​: 寫、讀操作,會删除先前檔案中的内容。
  • ​a+​

    ​: 追加、讀操作,不會删除和覆寫先前檔案中的内容。
  • ​x+​

    ​ :建立新檔案,讀寫操作。

​open()​

​方法的預設模式為 ​

​rt​

​ 模式,也就是讀文本檔案。 另外需要注意filename的寫法,比如檔案路徑是:​

​D:\test.txt​

​ ,其中​

​\t​

​ 可能會被轉義,需要自前面加一個 ​

​r​

​ :

f = open(r"D:\test.txt", "w"      

5. 寫檔案

讀寫檔案都需要先打開檔案,傳回一個檔案對象,然後對檔案對象進行讀寫操作。寫檔案需要設定寫權限,比如 ​

​w​

​、​

​w+​

​、​

​a​

​ 模式。 寫檔案主要包括兩種方法:

  • ​file.write(str)​

    ​:寫入字元串
  • ​file.writelines(list)​

    ​:寫入字元串清單,用于同時插入多個字元串。

舉個栗子:

file = open("newfile.txt", 'w')
text1 = "Hello World!\n你好,世界!\r"
file.write(text1)  # 寫入内容資訊
text2 = ["To the time to life, \n", "rather than to life in time.\r"]
file.writelines(text2)
file.close(      

​w​

​ 模式會删除先前檔案中的内容,如果不想删除,需要直接追加到後面,可以使用​

​a​

​ 和 ​

​a+​

​ 模式:

file = open("newfile.txt", 'a'      

6. 讀檔案

常見的讀取檔案方法有以下幾種:

  • in操作符
  • read():讀取所有資料,傳回一個字元串。
  • readline():讀取第一行
  • readlines():讀取所有行,每行儲存為清單的一個元素。
# 打開并讀取檔案
file = open("newfile.txt", 'r')
for line in file:
    print(line)
print()
file.seek(0, 0)
print(file.read(5))  # 
print()
file.seek(0, 0)
print(file.readline(12))
print()
file.seek(0, 0)
print(file.readlines())
print()
file.close(      

執行結果:

Hello World!
你好,世界!
To the time to life, 
rather than to life in time.
Hello
Hello World!
['Hello World!\n', '你好,世界!\n', 'To the time to life, \n', 'rather than to life in time.\n'      

7. with語句

text1 = "Hello World!\n你好,世界!\r"
text2 = ["To the time to life, \n", "rather than to life in time.\r"]
# 寫
with open("newfile.txt", "w") as file:
    file.write(text1)
    file.writelines(text2)
# 讀
with open("newfile.txt", "r+") as file:
    print(file.read()