python文件輸入輸出

f.read()

爲了讀取一個文件的內容,調用 f.read(size), 這將讀取一定數目的數據, 然後作爲字符串或字節對象返回。

size 是一個可選的數字類型的參數。 當 size 被忽略了或者爲負, 那麼該文件的所有內容都將被讀取並且返回。

以下實例假定文件 foo.txt 已存在(上面實例中已創建):

實例

#!/usr/bin/python3

# 打開一個文件
f = open("/tmp/foo.txt", "r")

str = f.read()
print(str)

# 關閉打開的文件
f.close()

執行以上程序,輸出結果爲:

Python 是一個非常好的語言。
是的,的確非常好!!

f.readline()

f.readline() 會從文件中讀取單獨的一行。換行符爲 '\n'。f.readline() 如果返回一個空字符串, 說明已經已經讀取到最後一行。

實例

#!/usr/bin/python3

# 打開一個文件
f = open("/tmp/foo.txt", "r")

str = f.readline()
print(str)

# 關閉打開的文件
f.close()

執行以上程序,輸出結果爲:

Python 是一個非常好的語言。

f.readlines()

f.readlines() 將返回該文件中包含的所有行。

如果設置可選參數 sizehint, 則讀取指定長度的字節, 並且將這些字節按行分割。

實例

#!/usr/bin/python3

# 打開一個文件
f = open("/tmp/foo.txt", "r")

str = f.readlines()
print(str)

# 關閉打開的文件
f.close()

執行以上程序,輸出結果爲:

['Python 是一個非常好的語言。\n', '是的,的確非常好!!\n']

另一種方式是迭代一個文件對象然後讀取每行:

實例

#!/usr/bin/python3

# 打開一個文件
f = open("/tmp/foo.txt", "r")

for line in f:
    print(line, end='')

# 關閉打開的文件
f.close()

執行以上程序,輸出結果爲:

Python 是一個非常好的語言。
是的,的確非常好!!

這個方法很簡單, 但是並沒有提供一個很好的控制。 因爲兩者的處理機制不同, 最好不要混用。

f.write()

f.write(string) 將 string 寫入到文件中, 然後返回寫入的字符數。

實例

#!/usr/bin/python3

# 打開一個文件
f = open("/tmp/foo.txt", "w")

num = f.write( "Python 是一個非常好的語言。\n是的,的確非常好!!\n" )
print(num)
# 關閉打開的文件
f.close()

執行以上程序,輸出結果爲:

29

如果要寫入一些不是字符串的東西, 那麼將需要先進行轉換:

實例

#!/usr/bin/python3

# 打開一個文件
f = open("/tmp/foo1.txt", "w")

value = ('www.runoob.com', 14)
s = str(value)
f.write(s)

# 關閉打開的文件
f.close()

執行以上程序,打開 foo1.txt 文件:

$ cat /tmp/foo1.txt 
('www.runoob.com', 14)

f.tell()

f.tell() 返回文件對象當前所處的位置, 它是從文件開頭開始算起的字節數。

f.seek()

如果要改變文件當前的位置, 可以使用 f.seek(offset, from_what) 函數。

from_what 的值, 如果是 0 表示開頭, 如果是 1 表示當前位置, 2 表示文件的結尾,例如:

 

  • seek(x,0) : 從起始位置即文件首行首字符開始移動 x 個字符
  • seek(x,1) : 表示從當前位置往後移動x個字符
  • seek(-x,2):表示從文件的結尾往前移動x個字符

from_what 值爲默認爲0,即文件開頭。下面給出一個完整的例子:

>>> f = open('/tmp/foo.txt', 'rb+')
>>> f.write(b'0123456789abcdef')
16
>>> f.seek(5)     # 移動到文件的第六個字節
5
>>> f.read(1)
b'5'
>>> f.seek(-3, 2) # 移動到文件的倒數第三字節
13
>>> f.read(1)
b'd'

 

f.close()

在文本文件中 (那些打開文件的模式下沒有 b 的), 只會相對於文件起始位置進行定位。

當你處理完一個文件後, 調用 f.close() 來關閉文件並釋放系統的資源,如果嘗試再調用該文件,則會拋出異常。

>>> f.close()
>>> f.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ValueError: I/O operation on closed file

當處理一個文件對象時, 使用 with 關鍵字是非常好的方式。在結束後, 它會幫你正確的關閉文件。 而且寫起來也比 try - finally 語句塊要簡短:

>>> with open('/tmp/foo.txt', 'r') as f:
...     read_data = f.read()
>>> f.closed
True

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章