Python自帶的文件讀取與輸出,來自 Cescfangs 的個人博客盛泡。
宇宙通用的open()
與其他很多語言一樣辜纲,Python操作文件的函數(shù)也是open()
:
>>> f=open('man.txt','w')
>>> f
<_io.TextIOWrapper name='man.txt' mode='w' encoding='cp936'>
第一個參數(shù)是文件兜粘,默認的是當前路徑,我們也可以自己絕對路徑洛二,第二個參數(shù)決定了文件的操作方式馋劈,這里是寫入,以下是常用的文件操作模式:
模式 | 說明 | 備注 |
---|---|---|
'w' | 寫入 | 只能向文件里寫入數(shù)據(jù)晾嘶,如果存在同名文件將會清除原來數(shù)據(jù) |
'r' | 只讀 | 只能讀取文件里的內(nèi)容妓雾,無法進行編輯 |
'r+' | 讀寫 | 可以進行文件的讀、寫操作 |
'a' | 添加 | 內(nèi)容添加到文件末尾 |
默認情況下垒迂,文件的讀取和輸出都是以文本格式進行的(默認UTF-8編碼)械姻,'b'會以二進制的形式對文件進行操作,'byte'是基本單位机断,一般來說二進制的文件會用在不包含文字的情況楷拳。
在文本模式下,讀取文件時吏奸,Python
會把不同平臺的換行符號(Unix: '\n', Windows: '\r\n')統(tǒng)一轉(zhuǎn)換成'\n'欢揖,在寫入文件時,執(zhí)行相反的過程奋蔚,這種模式對于文本文件的操作是沒有問題的她混,但是有一些二進制的數(shù)據(jù)卻會因此損壞,比如'exe'和'jpeg'文件泊碑,在對這些文件進行操作時一定要非常小心坤按。
文件操作的相關(guān)函數(shù)
假設我們的‘man.txt’文件已經(jīng)有一些信息。
f.read(size)
使用f.read(size)
來讀取文件的信息馒过,這個函數(shù)會返回一個字符串或者bytes object(不知道咋翻譯合適)臭脓,size
是可選的,缺省時將返回所有的信息腹忽,前提是文件數(shù)據(jù)得小于你的機器一次所能讀取的最大容量来累。到達文件末尾時砚作,會返回一個空字符串' '
:
>>> f = open('man.txt')
>>> f.read()
'hello world\nmy name is Cesc Fangs\nI like Arsenal!!'
>>> f.read()
''
完成文件操作后,記得用f.close()
關(guān)閉文件佃扼。
f.readline()
除了用read()
一次性讀取文件內(nèi)容外偎巢,還可以用readline()
來逐行讀取文件內(nèi)容:
>>> f = open('man.txt')
>>> f.readline()
'hello world\n'
>>> f.readline()
'my name is Cesc Fangs\n'
>>> f.readline()
'I like Arsenal!!'
>>> f.readline()
''
如果不是以新行結(jié)尾的,那么最后一行的不會返回'\n'會被忽略兼耀,但是以空行結(jié)尾的,最后會返回'\n'求冷。
需要逐行讀取文件內(nèi)容時瘤运,我們一般都配合循環(huán)來干:
>>> for line in f:
print(line, end='')
hello world
my name is Cesc Fangs
I like Arsenal!!
用list(f)
還可以直接直接把文件內(nèi)容存到列表中來讀取:
>>> f.close()
>>> f=open('man.txt')
>>> list(f)
['hello world\n', 'my name is Cesc Fangs\n', 'I like Arsenal!!']
f.write()
f.write()
可以把字符串寫入到文件中匠题,同時返回字符串的長度拯坟,如果要寫入其他數(shù)據(jù),需要先轉(zhuǎn)化成字符串:
>>> f = open('man.txt', 'a')
>>> f.write('I am a ZJUer \n')
14
>>> Ars = ['Ramsy', 16]
>>> s = str(Ars)
>>> f.write(s)
13