Python3檔案操作


本章涵蓋了 Python3 所有提供的基本I/ O功能。對於更多的功能,請參考標準Python文件。

列印到螢幕

產生輸出的最簡單方法是使用print語句,可以通過用逗號分隔零個或多個表示式。這個函式傳遞表示式轉換為一個字串,如下結果寫到標準輸出 -

#!/usr/bin/python3

print ("Python is really a great language,", "isn't it?")
這將產生以下結果標準螢幕上 -
Python is really a great language, isn't it?

讀取鍵盤輸入

Python2中有兩個內建的函式可從標準輸入讀取資料,它預設來自鍵盤。這些函式分別是:input() 和 raw_input()。

但在Python3中,raw_input()函式已被棄用。此外, input() 函式是從鍵盤作為字串讀取資料,不論是否使用引號(''或「」)與否。

input 函式

input([prompt]) 函式等同 raw_input,不同之處在於它假定輸入是一個有效的Python表示式並計算結果返回給你。

#!/usr/bin/python3

>>> x=input("something:")
something:10
>>> x
'10'
>>> x=input("something:")
something:'10' #entered data treated as string with or without ''
>>> x
"'10'"

開啟和關閉檔案

到現在為止,已經學習了讀取和寫入標準輸入和輸出。現在,我們學習如何使用檔案實際資料。

Python提供了基本的功能和必要的預設操作檔案的方法。您可以使用一個 file 物件來做大部分的檔案操作。

open 函式

在讀取或寫入一個檔案之前,你必須使用 Python 內建open()函式來開啟它。 該函式建立一個檔案物件,這將被用來呼叫與它相關的其他支援方式。

語法

file object = open(file_name [, access_mode][, buffering])
下面是引數的詳細資訊:
  • file_name: 檔案名(file_name )引數是包含您要存取的檔案名的字串值。

  • access_mode: access_mode指定該檔案已被開啟,即讀,寫,追加等方式。可能值的完整列表,在表中如下。

    這是可選的引數,預設檔案存取模式是讀(r)。
  • buffering: 如果該緩衝值被設定為0,則表示不使用緩衝。如果該緩衝值是1,則在存取一個檔案進行時行緩衝。

    如果指定緩衝值大於1的整數,緩衝使用所指示的緩衝器大小進行。如果是負數,緩衝區大小是系統預設的(預設行為)。

這裡是開啟一個檔案不同模式的列表 -
模式 描述
r 開啟一個檔案為唯讀。檔案指標被放置在檔案的開頭。這是預設模式。
rb 開啟一個檔案只能以二進位制格式讀取。檔案指標被放置在檔案的開頭。這是預設模式。
r+ 開啟用於讀和寫檔案。檔案指標置於該檔案的開頭。
rb+ 開啟用於讀取和寫入二進位制格式的檔案。檔案指標置於該檔案的開頭。
w 開啟一個檔案只寫。如果檔案存在覆蓋該檔案。如果該檔案不存在,則建立寫入新檔案。
wb 開啟一個檔案只能以二進位制格式寫入。如果檔案存在覆蓋該檔案。如果該檔案不存在,則建立寫入新檔案。
w+ 開啟檔案為寫入和讀取模式。如果檔案存在覆蓋現有檔案。如果該檔案不存在,建立用於讀寫操作的新檔案。
wb+ 開啟用於以二進位制格式寫入和讀出檔案。如果檔案存在覆蓋現有檔案。如果該檔案不存在,建立用於讀寫操作的新檔案。
a 開啟用於追加的檔案。檔案指標是在檔案是否存在該檔案的末尾。也就是說,該檔案是在追加模式。如果該檔案不存在,它會建立一個用於寫入的新檔案。
ab 開啟檔案用於二進位制格式追加檔案指標是在檔案是否存在該檔案的末尾。也就是說,檔案是在追加模式。 如果該檔案不存在,它會建立一個用於寫入的新檔案。
a+ 開啟檔案為追加和讀取方式。檔案指標是在檔案是否存在該檔案的末尾。該檔案以追加模式開啟。如果該檔案不存在,它將建立用於讀寫操作的新檔案。
ab+ 開啟一個檔案以附加和二進位制格式讀取模式。如果該檔案存在檔案指標在該檔案的末尾。該檔案以追加模式開啟。如果該檔案不存在,它將建立讀寫操作的新檔案。

file 物件屬性

一旦檔案被開啟,則就會有一個檔案物件,你可以得到有關該檔案的各種資訊。

這裡是一個檔案物件相關的所有屬性的列表:
屬性 描述
file.closed
如果檔案被關閉返回true,否則為false
file.mode
返回檔案開啟存取模式
file.name
返回檔案名
註:軟空間屬性未在Python3.x中支援

範例

#!/usr/bin/python3

# Open a file
fo = open("foo.txt", "wb")
print ("Name of the file: ", fo.name)
print ("Closed or not : ", fo.closed)
print ("Opening mode : ", fo.mode)
fo.close()
這將產生以下結果 -
Name of the file:  foo.txt
Closed or not :  False
Opening mode :  wb

close()方法

檔案物件的close()方法用於重新整理任何未寫入的資訊,並關閉檔案物件, 之後就沒有更多的寫入東西了。

Python自動關閉檔案當參考檔案物件分配給另一個檔案。使用 close()方法關閉檔案一個很好的做法。

語法

fileObject.close();

範例

#!/usr/bin/python3

# Open a file
fo = open("foo.txt", "wb")
print ("Name of the file: ", fo.name)

# Close opened file
fo.close()
這將產生以下結果 -
Name of the file:  foo.txt

讀寫檔案

檔案物件提供了一組存取方法。 我們將看到如何使用 read()和write()方法來讀取和寫入檔案。

write() 方法

write()方法將字串寫入一個開啟的檔案。要注意,Python的字串可以是二進位制資料,而不僅僅只是文字。

write()方法不新增換行符('\n')到字串的結尾-

語法

fileObject.write(string);
這裡,傳遞的引數是要寫入到開啟的檔案的內容。

範例

#!/usr/bin/python3

# Open a file
fo = open("foo.txt", "w")
fo.write( "Python is a great language.\nYeah its great!!\n")

# Close opend file
fo.close() 

上面的方法將建立 foo.txt 檔案,並給出的內容寫入檔案,最後將關閉該檔案如果開啟這個檔案,會看到它有以下內容。

Python is a great language.
Yeah its great!!

read() 方法

read()方法從一個開啟的檔案讀取字串。要注意,Python字串可以是二進位制資料。而並非只是文字資料。

語法

fileObject.read([count]); 

這裡,傳遞的引數是從開啟的檔案讀取的位元組數。該方法開始從檔案的開始讀取,並且如果 count 丟失,那麼它會嘗試盡可能讀,也許直到檔案的末尾。

範例

讓我們使用一個檔案 foo.txt,這是我們在上面所建立的。
#!/usr/bin/python3

# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10)
print ("Read String is : ", str)
# Close opened file
fo.close()
這將產生以下結果 -
Read String is :  Python is

檔案位置

tell() 方法告訴你該檔案中的當前位置;換句話說,下一個讀或寫將發生在從該檔案的開頭之後多個位元組。

seek(offset[, from]) 方法改變當前檔案的位置。 offset 引數指示要移動位元組數。from 引數指定位元組從哪移動的參考位置。

如果 from 被設定為0,這意味著使用該檔案的開頭作為基準位置,以及如果設定為1,則使用當前位置作為基準位置,如果它被設定為2,則該檔案的結束將被作為基準位置。

範例

讓我們使用一個檔案foo.txt,這是我們在上面建立的。
#!/usr/bin/python3

# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10)
print ("Read String is : ", str)

# Check current position
position = fo.tell()
print ("Current file position : ", position)

# Reposition pointer at the beginning once again
position = fo.seek(0, 0)
str = fo.read(10)
print ("Again read String is : ", str)
# Close opened file
fo.close()
這將產生以下結果 -
Read String is :  Python is
Current file position :  10
Again read String is :  Python is

重新命名和刪除檔案

Python的os模組提供了執行檔案處理操作,如重新命名和刪除檔案的方法。
要使用這個模組,需要先匯入它,然後就可以呼叫任何相關的功能了。

rename() 方法

rename()方法有兩個引數,當前檔案名和新的檔案名。

語法

os.rename(current_file_name, new_file_name)

範例

以下為例子用來重新命名現有檔案 test1.txt 為 test2.txt:
#!/usr/bin/python3
import os

# Rename a file from test1.txt to test2.txt
os.rename( "test1.txt", "test2.txt" )

remove() 方法

可以使用 remove()方法通過提供引數檔案名稱(file_name)來刪除檔案。

語法

os.remove(file_name)

範例

下面是刪除現有檔案 test2.txt 的例子 -
#!/usr/bin/python3
import os

# Delete file test2.txt
os.remove("text2.txt")

Python目錄

所有的檔案都包含不同的目錄中,Python處理這些目錄操作也沒有什麼問題。os模組中有用於建立,刪除和更改目錄的幾種方法。

mkdir() 方法

可以使用os模組中的 mkdir()方法在當前目錄下建立目錄。需要提供一個引數到這個方法指定要建立的目錄名。

語法

os.mkdir("newdir")

範例

下面是在當前目錄建立 test 目錄的例子 -
#!/usr/bin/python3
import os

# Create a directory "test"
os.mkdir("test")

chdir() 方法

可以使用 chdir() 方法來改變當前目錄。chdir() 方法接受一個引數,就是你想在當前目錄建立的目錄的目錄名稱。

語法

os.chdir("newdir")

範例

以下是進入 "/home/newdir" 目錄的例子-
#!/usr/bin/python3
import os

# Changing a directory to "/home/newdir"
os.chdir("/home/newdir")

getcwd()方法

getcwd()方法顯示當前的工作目錄。

語法

os.getcwd()

範例

以下是獲得當前目錄的例子 -
#!/usr/bin/python3
import os

# This would give location of the current directory
os.getcwd()

rmdir() 方法

rmdir()方法刪除目錄,這是作為方法的引數傳遞。
刪除目錄前,它的所有內容應該先刪除。

方法:

os.rmdir('dirname')

範例

以下是刪除 "/tmp/test" 目錄的例子。它需要給定目錄的完全合格的名稱,否則會從當前目錄搜尋目錄。

#!/usr/bin/python3
import os

# This would  remove "/tmp/test"  directory.
os.rmdir( "/tmp/test"  )

相關檔案和目錄的方法

有三個重要來源,它提供了多種實用的方法來處理 和操作在Windows和Unix作業系統的檔案和目錄。它們如下 -