Python學習筆記讀寫文件之文件與文件路徑


 

隨筆記錄方便自己和同路人查閱。

#------------------------------------------------我是可恥的分割線-------------------------------------------

  文件有兩個關鍵屬性:“文件名”(通常寫成一個單詞)和“路徑”。路徑指明了文件在計算機上的位置。例如,我的 Windows 7 筆記

本上有一個文件名為projects.docx,它的路徑在C:\Users\asweigart\Documents。文件名中,最后一個句點之后的部分稱為文件的“擴展

名”,它指出了文件的類型。project.docx 是一個Word 文檔,Users、asweigart和 Documents 都是指“文件夾”(也成為目錄)。文件夾

可以包含文件和其他文件夾。例如,project.docx 在Documents 文件夾中,該文件夾又在asweigart 文件夾中,asweigart文件夾又在Users

文件夾中。路徑中的 C:\部分是“根文件夾”,它包含了所有其他文件夾。在 Windows 中,根文件夾名為 C:\,也稱為 C:盤。在 OS X 和

Linux 中,根文件夾是/。

#------------------------------------------------我是可恥的分割線-------------------------------------------

  在文件夾層次結構中的一個文件:

  1、Windows 上的倒斜杠以及 OS X 和 Linux 上的正斜杠

  在Windows上,路徑書寫使用到斜杠作為文件夾之間的分隔符。但在OSX和Linux上,使用正斜杠作為它們路徑的分隔符。如果想要

程序運行在所有操作系統上,在編寫Python腳本時,就必須處理這兩種情況。

  好在,用os.path.join()函數來做這件事很簡單。如果將單個文件和路徑上的文件夾名稱的字符串傳遞給它,os.path.join()就會返回一個

文件夾路徑的字符串,包含正確的路徑分隔符。

  示例代碼:

#! python 3
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
#導入os模塊
import os
#把文件名稱傳遞給os.path.join()函數
path_file = os.path.join('usr', 'bin', 'spam')
#打印文件路徑
print(path_file)

  運行結果:

  如果需要創建文件名稱的字符串,os.path.join()函數就很有用。這些字符串將傳遞給幾個文件相關的函數,本章將進行介紹。例如,下面的

例子將一個文件名列表中的名稱,添加到文件夾名稱的末尾。

  示例代碼:

#! python 3
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
#導入os模塊
import os
#定一個列表,存放文件名
myFiles = ['accounts.txt', 'details.csv', 'invite.docx']
#循環文件名
for filename in myFiles:
    #使用os.path.join()函數,把文件名作為第二個參數加上地址
    print(os.path.join('C:\\Users\\asweigart', filename))

  運行結果;

  2、當前工作目錄

  每個運行在計算機上的程序,都有一個“當前工作目錄”,或cwd。所有沒有從根文件夾開始的文件名或路徑,都假定在當前工作目錄下。利用os.getcwd()函數

,可以取得當前工作路徑的字符串,並可以利用os,chdir()改變它。

  利用os.getcwd()函數獲取當前工作目錄,示例代碼:

#! python 3
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
#導入os模塊
import os
#利用os.getcwd()函數,獲取當前工作路徑
print(os.getcwd())

  運行結果:

  利用os.chdir()函數改變當前工作目錄,示例代碼:

#! python 3
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
#導入os模塊
import os
#利用os.getcwd()函數,獲取當前工作路徑
print(os.getcwd())
#利用os.chdir(),改變當前目錄
os.chdir('D:\\360Downloads\\Software')
#打印改變后的,當前目錄
print(os.getcwd())

  運行結果:

  3、絕對路徑與相對路徑

  有兩種方法指定一個文件路徑。

  (1)“絕對路徑”,總是從根文件夾開始。

  (2)相對路徑,它相對於程序的當前工作目錄。

  還有點(.)和點點(..)文件夾。它們不是真正的文件夾,而是可以在路徑中使用的特殊名稱。單個的句點(‘點’)用作文件夾名稱時,是‘這個目錄’的縮寫

。兩個句點(‘點點’)意思是父級文件夾。

  下圖是一些文件夾和文件的例子。如果當前工作目錄設置為 C:\bacon,這些文件夾和文件的相對目錄,就設置為下圖所示的樣子。

  4、用os.makedirs()創建新文件夾,示例代碼:

#! python 3
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
#導入os模塊
import os
#利用os.makedirs()函數,創建新的文件夾
os.makedirs('D:\\Users\\Administrator')

  運行結果:

  5、os.path模塊

  os.path模塊包含了許多與文件名和文件路徑相關的有用函數。例如,你已經使用了os.path.join()來構建所有操作系統上都有效的路徑。

因為os.path是os模塊中的模塊,所以只要執行import os就可以導入它。如果你的程序需要處理文件、文件夾或文件路徑,就可以使用os模塊。

  6、處理絕對路徑和相對路徑

  os.path模塊提供了一些函數,返回一個相對的絕對路徑,以及檢查給定的路徑是否為絕對路徑。

  (1)調用os.path.abspath(path),將返回參數的絕對路徑的字符串。這就是相對路徑轉換為絕對路徑的簡單方法。

  os.path.abspath()函數,示例代碼:

#! python 3
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
#導入os模塊
import os
#利用os.path.abspath()函數,取得當前工作目錄的絕對路徑(.句點表示為當前路徑)
print(os.path.abspath('.'))
#利用os.path.abspath()函數,取得當前工作目錄父級的絕對路徑(..兩個句點表示為當前路徑的父級目錄)
print(os.path.abspath('..'))

  運行結果;

  (2)調用os.path.isabs(path),如果參數是一個絕對路徑,就返回True,如果參數是一個相對路徑,就返回False。

  os.path.isabs()函數,示例代碼

#! python 3
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
#導入os模塊
import os
#利用os.path.isabs()函數,判斷當前為絕對路徑還是相對路徑,傳入絕對路徑,返回True
print(os.path.isabs('C:\\Users\Administrator\PycharmProjects\test'))
#利用os.path.isabs()函數,判斷當前為絕對路徑還是相對路徑,傳入相對路徑,返回False
print(os.path.isabs('.'))
#利用os.path.isabs()函數,判斷當前為絕對路徑還是相對路徑,傳入相對路徑,返回False
print(os.path.isabs('..'))

  運行結果:

  (3)調用os.path.relpath(path,start)將返回從start路徑到path的相對路徑的字符串。如果沒有提供 start,就使用當前工作目錄作為開始路徑。

  os.path.relpath() 函數,示例代碼:

#導入os模塊
import os
print(os.path.relpath('C:\\Windows', 'C:\\'))
print(os.path.relpath('C:\\Users\Administrator\\PycharmProjects\\test', 'C:\\Users\\Administrator'))

  運行結果:

  7、查看文件大小和文件內容

  一旦有辦法處理文件路徑,就可以開始搜集特定文件和文件夾的信息。os.path 模塊提供了一些函數,用於查看文件的字節數以及給定文件夾中的文件

和子文件夾。

  (1)調用 os.path.getsize(path)將返回 path 參數中文件的字節數。

  os.path.getsize()函數,示例代碼:

#利用os.path.getsize()函數,獲取路徑下所有文件的大小
print(os.path.getsize('C:\\Users\\Administrator\\PycharmProjects\\test\\文件讀寫'))
#利用os.path.getsize()函數,獲取路徑下指定文件的大小
print(os.path.getsize('C:\\Users\\Administrator\\PycharmProjects\\test\\文件讀寫\\Create_Folder.py'))

  運行結果:

  (2)調用os.listdir(path)將返回文件名字符串的列表,包含path參數中的每個文件(這個函數在os模塊中,而不是os.path)

   os.listdir()函數,示例代碼:

#! python 3
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
#導入os模塊
import os
#利用os.listdir()函數,獲取路徑下的所有文件,並返回一個列表值
print(os.listdir('C:\\Users\\Administrator\\PycharmProjects\\test\\文件讀寫'))

  運行結果;

   8、檢查路徑的有效性

  如果你提供的路徑不存在,許多 Python 函數就會崩潰並報錯。os.path 模塊提供了一些函數,用於檢測給定的路徑是否存在,以及它是文件還是文件夾。

  (1)如果path參數存在,並且是一個文件或文件夾存在,調用os.path.exists(path)將返回True,否則返回False.

  os.path.exists()函數,示例代碼:

#導入os模塊
import os
#利用os.path.exists()函數,判斷是否為文件或文件夾,是返回True,否則返回False.
print(os.path.exists('C:\\Users\\Administrator\\PycharmProjects\\test\\文件讀寫'))
#利用os.path.exists()函數,判斷是否為文件或文件夾,是返回True,否則返回False.
print(os.path.exists('C:\\Users\\Administrator\\PycharmProjects\\test\\文件讀寫\\Create_Folder.py'))
#利用os.path.exists()函數,判斷是否為文件或文件夾,是返回True,否則返回False.
print(os.path.exists('C'))
#利用os.path.exists()函數,判斷是否為文件或文件夾,是返回True,否則返回False.
print(os.path.exists('Create_Folder.py'))

  運行結果:

  (2)如果path參數存在,並且是一個文件,調用os.path.isfile(path)將返回True,否則返回False.

#導入os模塊
import os
#利用os.path.isfile()函數,判斷是否為文件,是返回True,否則返回False.
#文件夾
print(os.path.isfile('C:\\Users\\Administrator\\PycharmProjects\\test\\文件讀寫'))
#文件
print(os.path.exists('C:\\Users\\Administrator\\PycharmProjects\\test\\文件讀寫\\Create_Folder.py'))
#字符
print(os.path.exists('C'))
#數字
print(os.path.exists('1'))

  運行結果:

  (3)如果path參數存在,並且是一個文件夾,調用os.path.isdir(path)將返回True,否則返回False.

 

#! python 3
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
#導入os模塊
import os
#利用os.path.isdir()函數,判斷是否為文件,是返回True,否則返回False.
#文件夾
print(os.path.isdir('C:\\Users\\Administrator\\PycharmProjects\\test\\文件讀寫'))
#文件
print(os.path.isdir('C:\\Users\\Administrator\\PycharmProjects\\test\\文件讀寫\\Create_Folder.py'))
#字符
print(os.path.isdir('C'))
#數字
print(os.path.isdir('1'))

  運行結果:

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM