Python 檔案 seek() 方法



Python 檔案seek()方法將檔案的遊標設定在當前檔案的指定位置。檔案的遊標用於儲存檔案讀取和寫入操作的當前位置;此方法可以向前或向後移動此檔案遊標。

例如,每當我們開啟一個檔案進行讀取時,檔案遊標總是位於 0 位置。當我們遍歷檔案內容時,它會逐漸遞增。但是,某些情況下需要從檔案的特定位置讀取檔案。這就是此方法發揮作用的地方。

讓我們看看使用 seek() 方法的各種情況:

  • 如果使用 'a' 或 'a+' 以追加模式開啟檔案,則在下次寫入時將撤消任何 seek() 操作。
  • 如果僅使用 'a' 以追加模式開啟檔案進行寫入,則此方法本質上是一個無操作,但對於以啟用讀取的追加模式(模式 'a+')開啟的檔案仍然有用。
  • 如果使用 't' 以文字模式開啟檔案,則只有 tell() 返回的偏移量才是合法的。使用其他偏移量會導致未定義的行為。
  • 所有檔案物件都是可查詢的。

語法

以下是 Python 檔案seek()方法的語法:

fileObject.seek(offset[, whence])

引數

  • offset − 這是在檔案中移動讀/寫指標的位置數。

  • whence − (可選)預設為 0;這意味著絕對檔案定位,其他值為 1,這意味著相對於當前位置查詢,2 意味著相對於檔案末尾查詢。

返回值

此方法不返回值。它只是將遊標設定在指定的偏移量。

示例

考慮一個包含 5 行的演示檔案“foo.txt”。

This is 1st line
This is 2nd line
This is 3rd line
This is 4th line
This is 5th line

以下示例顯示了 Python 檔案 seek() 方法的用法。我們試圖將指標設定在檔案的開頭。因此,我們將偏移量引數傳遞給此方法為 0。

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

# Assuming file has following 5 lines
# This is 1st line
# This is 2nd line
# This is 3rd line
# This is 4th line
# This is 5th line

line = fo.readline()
print("Read Line:", line)

# Again set the pointer to the beginning
fo.seek(0, 0)
line = fo.readline()
print("Read Line:", line)

# Close opened file
fo.close()

當我們執行上面的程式時,它會產生以下結果:

Name of the file:  foo.txt
Read Line: This is 1st line

Read Line: This is 1st line

示例

也可以相對於其在檔案中的當前位置設定指標的新位置。為此,我們必須始終以二進位制模式開啟檔案:它可以是讀取二進位制或寫入二進位制模式。然後,我們將要從當前位置移動的位置數作為偏移量引數傳遞,並將值 1 作為 whence 引數傳遞給該方法。

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

# Set the pointer to the new position relative to current position
fo.seek(18, 1)

line = fo.read()
print("File Contents:", line)

# Close opened file
fo.close()

執行給定程式後產生的輸出將採用二進位制形式。但可以使用 decode() 方法將其解碼為字串。

Name of the file:  foo.txt
File Contents: b'This is 2nd line\r\nThis is 3rd line\r\nThis is 4th line\r\nThis is 5th line'

示例

但是,在某些情況下,我們需要將指標設定在檔案的末尾;例如,使用讀寫 (r+) 模式將資訊追加到現有檔案中。讓我們看下面的一個示例,它在名為“foo.txt”的檔案上演示了這一點。

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

# Set the pointer to the ending
fo.seek(0, 2)

fo.write("This is the end of file")

# Again set the pointer at the beginning
fo.seek(0, 0)

line = fo.read()
print("File Contents:", line)

# Close opened file
fo.close()

一旦我們編譯並執行上面的程式,輸出將如下所示:

Name of the file:  foo.txt
File Contents: This is 1st line
This is 2nd line
This is 3rd line
This is 4th line
This is 5th lineThis is the end of file

示例

正如我們上面已經討論過的,檔案的遊標也可以從檔案的末尾向後移動;或者從某個位置。在給定的示例中,我們以讀取二進位制 (rb) 模式開啟檔案“foo.txt”。檔案遊標透過將 whence 引數設定為 2 來設定在檔案末尾,並且透過將負值作為偏移量引數傳遞給該方法,我們試圖將檔案遊標向後移動。

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

# Move the pointer backwards using negative offset
fo.seek(-36, 2)

line = fo.read()
print("File Contents:", line)

# Close opened file
fo.close()

如果我們編譯並執行上面的程式,檔案內容將從檔案末尾開始讀取,直到指定的位置。

Name of the file:  foo.txt
File Contents: b'\r\nThis is 4th line\r\nThis is 5th line'

示例

tell() 方法與 seek() 方法配合使用。在下面的例子中,我們嘗試使用 seek() 方法將檔案游標設定到特定位置,然後使用 tell() 方法檢索這個設定的位置。

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

# Move the pointer backwards using negative offset
fo.seek(18, 0)

line = fo.read()
print("File Contents:", line)

#Using tell() method retrieve the cursor position from the ending
print("File cursor is present at position", fo.tell())

# Close opened file
fo.close()

執行上面的程式後,輸出顯示為:

Name of the file:  foo.txt
File Contents: This is 2nd line
This is 3rd line
This is 4th line
This is 5th line
File cursor is present at position 88
python_files_io.htm
廣告