Python文件讀寫
在本章中將介紹Python 3中可用的所有基本文件讀取I/O功能。有關更多功能,請參考標準Python文檔。
打印到屏幕
產生輸出的最簡單方法是使用print
語句,可以傳遞零個或多個由逗號分隔的表達式。此函數將傳遞的表達式轉換爲字符串,並將結果寫入標準輸出,如下所示:
#!/usr/bin/python3
print ("Python是世界上最牛逼的語言,", "難道不是嗎?")
執行上面代碼後,將在標準屏幕上產生以下結果 -
Python是世界上最牛逼的語言, 難道不是嗎?
從鍵盤讀取輸入
Python 2有兩個內置的函數用於從標準輸入讀取數據,默認情況下來自鍵盤。這兩個函數分別是:input()
和raw_input()
。
在Python 3中,不建議使用raw_input()
函數。 input()
函數可以從鍵盤讀取數並作爲字符串類型,而不管它是否用引號括起來(「或」「)。
>>> x = input("input something:")
input something:yes,input some string
>>> x
'yes,input some string'
>>> x = input("input something:")
input something:1239900
>>> x
'1239900'
>>>
打開和關閉文件
在前面我們學習讀取和寫入標準的輸入和輸出。 現在,來看看如何使用實際的數據文件。Python提供了默認操作文件所必需的基本功能和方法。可以使用文件對象執行大部分文件操作。
打開文件
在讀取或寫入文件之前,必須使用Python的內置open()
函數打開文件。此函數創建一個文件對象,該對象將用於調用與其相關聯的其他支持方法。
語法
file object = open(file_name [, access_mode][, buffering])
這裏是參數詳細信息 -
- file_name -
file_name
參數是一個字符串值,指定要訪問的文件的名稱。 - access_mode -
access_mode
確定文件打開的模式,即讀取,寫入,追加等。可能的值的完整列表如下表所示。 這是一個可選參數,默認文件訪問模式爲(r
- 也就是隻讀)。 - buffering - 如果
buffering
值設置爲0
,則不會發生緩衝。 如果緩衝值buffering
爲1
,則在訪問文件時執行行緩衝。如果將緩衝值buffering
指定爲大於1
的整數,則使用指定的緩衝區大小執行緩衝操作。如果爲負,則緩衝區大小爲系統默認值(默認行爲)。
以下是打開文件使用的模式的列表 -
編號
模式
描述
1
r
打開的文件爲只讀模式。文件指針位於文件的開頭,這是默認模式。
2
rb
打開僅用二進制格式讀取的文件。文件指針位於文件的開頭,這是默認模式。
3
r+
打開讀寫文件。文件指針放在文件的開頭。
4
rb+
以二進制格式打開一個用於讀寫文件。文件指針放在文件的開頭。
5
w
打開僅供寫入的文件。 如果文件存在,則覆蓋該文件。 如果文件不存在,則創建一個新文件進行寫入。
6
wb
打開僅用二進制格式寫入的文件。如果文件存在,則覆蓋該文件。 如果文件不存在,則創建一個新文件進行寫入。
7
w+
打開寫入和取讀的文件。如果文件存在,則覆蓋現有文件。 如果文件不存在,創建一個新文件進行閱讀和寫入。
8
wb+
打開一個二進制格式的寫入和讀取文件。 如果文件存在,則覆蓋現有文件。 如果文件不存在,創建一個新文件進行閱讀和寫入。
9
a
打開一個文件進行追加。 如果文件存在,則文件指針位於文件末尾。也就是說,文件處於追加模式。如果文件不存在,它將創建一個新文件進行寫入。
10
ab
打開一個二進制格式的文件。如果文件存在,則文件指針位於文件末尾。 也就是說,文件處於追加模式。如果文件不存在,它將創建一個新文件進行寫入。
11
a+
打開一個文件,用於追加和閱讀。 如果文件存在,則文件指針位於文件末尾。 文件以附加模式打開。 如果文件不存在,它將創建一個新文件進行閱讀和寫入。
12
ab+
打開一個二進制格式的附加和讀取文件。 如果文件存在,則文件指針位於文件末尾。文件以附加模式打開。如果文件不存在,它將創建一個新文件進行讀取和寫入。
文件對象屬性
打開一個文件並且有一個文件對象後,可以獲得與該文件相關的各種信息。
以下是與文件對象相關的所有屬性的列表 -
編號
屬性
描述
1
file.closed
如果文件關閉則返回true
,否則返回false
。
2
file.mode
返回打開文件的訪問模式。
3
file.name
返回文件的名稱。
注意 - Python 3.x中不支持
softspace
屬性
示例
#!/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);
這裏,傳遞參數 - 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
文件,並將給定的內容寫入到該文件中,最後將關閉文件。 在執行上面語句後,如果打開文件(foo.txt
),它將應該以下內容 -
Python is a great language.
Yeah its great!!
read()方法
read()
方法用於從打開的文件讀取一個字符串。 重要的是要注意Python字符串除文本數據外可以是二進制數據。。
語法
fileObject.read([count]);
這裏,傳遞參數 - 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()
方法並通過提供要刪除的文件的名稱作爲參數來刪除文件。
語法
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()
方法接受一個參數,它是要選擇作爲當前目錄的目錄的名稱。
語法
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操作系統上的文件和目錄。它們如下 -
- 文件對象和方法 - 文件對象提供了操作文件的功能。
- OS對象和方法 - 這提供了處理文件和目錄的方法。