打開文件
1,在Python中,是用open()打開文件并返回文件對(duì)象的
## open() 語法格式
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
## 參數(shù)太多? 沒關(guān)系 ,我們只要關(guān)注第1 ,2 ,4就行
fi = open("E:\\python\\text.txt" , "r" , enconding = "UTF-8")
fi.close()
這里注意一點(diǎn):假如文件存在當(dāng)前目錄下,就可以直接寫文件,否則要把文件的絕對(duì)路徑寫全。并且打開文件之后一定記得關(guān)閉文件?。。?!
2,文件打開的方式(或者理解為賦予對(duì)文件的權(quán)限),即第二個(gè)參數(shù)mode對(duì)應(yīng)的value
| 打開模式 | 執(zhí)行操作 |
|---|---|
| "r" | 以只讀的方式打開文件(默認(rèn)) |
| "w" | 寫入的方式打開文件,會(huì)覆蓋已有的文件,一定小心! |
| "x" | 如果文件存在,使用此模式打開會(huì)報(bào)錯(cuò) |
| "a" | 寫入的方式打開文件,若文件已存在,則在末尾追加寫入 |
| "b" | 二進(jìn)制的方式打開文件 |
| "t" | 文本模式打開文件(默認(rèn)) |
| "+" | 添加在其他模式中,賦予讀寫的權(quán)利 |
| "U" | 通用換行符支持 |
3,文件對(duì)象的方法
? 當(dāng)我們是用open 函數(shù)打開文件時(shí) ,返回的是文件對(duì)象
>>> fi = open("/home/luohg/software/text.txt" ,"r",encoding = "UTF-8")
>>> fi
<_io.TextIOWrapper name='/home/luohg/software/text.txt' mode='r' encoding='UTF-8'>
所以要對(duì)文件執(zhí)行進(jìn)一步操作,就需要用文件對(duì)象的一些方法對(duì)文件進(jìn)行讀取或修改等操作。
| 文件對(duì)象的方法 | 執(zhí)行操作 |
|---|---|
| close() | 關(guān)閉文件 |
| read(size = -1) | 從文件開頭讀取size個(gè)字符,當(dāng)未給定size時(shí),讀取所有字符,然后作為字符串返回 |
| readline() | 從文件中讀取一行 |
| readlines() | 讀取所有行,比較耗內(nèi)存 |
| write(str) | 將字符串str寫入文件 |
| writelines(seq) | 向文件寫入字符串序列seq,seq是一個(gè)返回字符串的迭代對(duì)象 |
| seek(offset , from) | 調(diào)節(jié)文件指針,從from(0,表示起始位置,1表示當(dāng)前位置,2表示末尾)偏移offset個(gè)字節(jié) |
| tell() | 返回當(dāng)前在文件中的位置(即文件指針) |
個(gè)人理解:在Python中對(duì)文件的讀取其實(shí)跟我們平時(shí)用Word差不多,文件指針就是閃爍的小豎杠,而tell()和seek()函數(shù)就是對(duì)小豎杠的調(diào)節(jié)。
>>> fi = open("/home/luohg/software/text.txt" ,"r",encoding = "UTF-8")
>>> fi.read()
'人生苦短,我用Python!\n我有一頭小毛驢,我從來也不騎'
>>> fi.read()
''
>>> fi.tell()
29
? 我們發(fā)現(xiàn),fi.read()打印出文件內(nèi)容后,此時(shí)再執(zhí)行一次fi.read就不會(huì)打印任何內(nèi)容,這就是因?yàn)槲募羔槾藭r(shí)在文件末尾。tell()函數(shù)告訴我們,此時(shí)在第29個(gè)字符(一個(gè)漢字等于兩個(gè)字符)
>>> fi = open("/home/luohg/software/text.txt" ,"r",encoding = "UTF-8")
>>> fi.read()
'人生苦短,我用Python!\n我有一頭小毛驢,我從來也不騎'
>>> fi.seek(0,0)
0
>>> fi.read()
'人生苦短,我用Python!\n我有一頭小毛驢,我從來也不騎'
? 當(dāng)我們用seek函數(shù)將文件指針調(diào)回起點(diǎn)時(shí),就又可以打印出來內(nèi)容了.
? readline()用于讀取一行,即從文件指針向后讀,直到遇到換行符(\n結(jié)束)
>>> fi.readline()
'人生苦短,我用Python!\n'
## 前面說了列表的功能很強(qiáng)大,所以我們也可以把文件轉(zhuǎn)化成列表的格式
>>> fi.seek(0,0)
0
>>> list(fi)
['人生苦短,我用Python!\n', '我有一頭小毛驢,我從來也不騎']
## 假如迭代讀取每一行,我們可以直接使用文件對(duì)象本身,因?yàn)槠浔旧砭椭С值?fi.seek(0,0)
for each_line in fi :
print(each_line)
4 , 文件的寫入
? 如若需要寫入文件,請(qǐng)確保之前打開模式由"w"或"a",否則會(huì)報(bào)錯(cuò)
fi = open("/home/luohg/software/text.txt" ,"w",encoding = "UTF-8")
fi.write("請(qǐng)把我加上吧!")
? 注意:使用"w"模式寫入文件,此前文件的內(nèi)容會(huì)全部刪除,若想在原來的基礎(chǔ)上添加內(nèi)容,一定要使用"a"模式!