Python文件基本操作
Python文件基本操作
1、文件對象的屬性
| file.closed | 如果文件已被關閉返回true,否則返回false。 |
| file.mode | 返回被打開文件的訪問模式。 |
| file.name | 返回文件的名稱。 |
| file.newlines | 未讀取到行分隔符時為 None , 只有一種行分隔符時為一個字符串, 當 文件有多種類型的行結束符時,則為一個包含所有當前所遇到的行結束 符的列表 |
| file.encoding | 返回文件的編碼方式 |
2、文件的打開
文件打開是通過內(nèi)置函數(shù)open(),并返回一個文件對象,
file object = open(file_name [, access_mode][, buffering])file_name: file_name變量是一個包含了你要訪問的文件名稱的字符串值。比如:‘hello.text’
access_mode:訪問文件的模式,只讀(r),寫入(w),追加(a)等。所有可取值見如下的完全列表。這個參數(shù)是非強制的,默認文件訪問模式為只讀(r)。
buffering:值為0,訪問文件時不寄存行。值為1,訪問文件時寄存行。值為大于1的正數(shù)表示指定寄存區(qū)緩沖大小。值為負數(shù)時表示寄存區(qū)緩沖大小為系統(tǒng)默認。
一表勝十文:
| r | 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式. |
| rb | 以二進制格式打開一個文件用于只讀。文件指針將會放在文件的開頭。這是默認模式。一般用于非文本文件如圖片等。 |
| r+ | 以讀寫方式打開文件,文件的指針在文件的開頭 |
| rb+ | 以二進制格式打開一個文件可以用于讀寫,文件指針放在開頭。一般用于非文本文件如圖片等。 |
| w | 以只寫方式打開文件,文件的指針在文件的開頭,如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。 |
| wb | 以二進制格式打開一個文件用于只寫,文件的指針在文件的開頭。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。一般用于非文本文件如圖片等。 |
| w+ | 打開一個文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。 |
| wb+ | 以二進制格式打開一個文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。一般用于非文本文件如圖片等。 |
| a | 打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內(nèi)容將會被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進行寫入。 |
| ab | 以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內(nèi)容將會被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進行寫入。r+ |
| a+ | 打開一個文件用于讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創(chuàng)建新文件用于讀寫。 |
| ab+ | 以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創(chuàng)建新文件用于讀寫。 |
一圖勝十表:
| 讀 | ?? | ?? | ? | ?? | ? | ?? |
| 寫 | ? | ?? | ?? | ?? | ?? | ?? |
| 創(chuàng)建 | ? | ? | ?? | ?? | ?? | ?? |
| 覆蓋 | ? | ? | ?? | ?? | ? | ? |
| 指針在開始 | ?? | ?? | ?? | ?? | ? | ? |
| 指針在結尾 | ? | ? | ? | ? | ?? | ?? |
3、文件輸入
文件的輸入和輸出是相對應屏幕來說,從讀取文件內(nèi)容到屏幕上叫輸入,將屏幕上內(nèi)容寫到文件內(nèi)叫輸出
3.1 read(size):
用于從文件讀取指定的字節(jié)數(shù),size:從文件中讀取的字節(jié)數(shù)。如果size未給定或為負則讀取所有
allen.txt文件內(nèi)容
從結果上看,使用同一個file讀取多次時,指針的位置從上一次讀取的最后位置的下一個位置開始讀取的。
3.2 readline()
用于從文件讀取整行,包括 "\n" 字符。如果指定了一個非負數(shù)的參數(shù),則返回指定大小的字節(jié)數(shù),包括 "\n" 字符。
fo = open("allen.txt", "r+") print("文件名為: ", fo.name)line = fo.readline() print("讀取第一行 %s" % line)line = fo.readline(5) print("讀取的字符串為: %s" % line) fo.close()結果:
文件名為: allen.txt 讀取第一行 line1 讀取的字符串為: line23.3 readlines()
用于讀取剩余未讀取的所有行(直到結束符 EOF)并返回列表,而不是所有行,如果碰到結束符 EOF 則返回空字符串。
fo = open("allen.txt", "r+") print("文件名為: ", fo.name) line = fo.readlines(1) print("讀取第一行 %s" % line) line = fo.readlines() print("讀取剩余行: %s" % line) fo.close()結果:
文件名為: allen.txt 讀取第一行 ['line1\n'] 讀取剩余行: ['line2\n', 'line3']使用for循環(huán)
例子1:
結果:
line1line2line3例子2:
fo = open('allen.txt', 'r') for line in fo.readlines():print(line.strip()) fo.closed再來看加上strip()后的結果
line1 line2 line3從以上兩個例子中可以看出,readlines()讀取的時候?qū)Q行符\n也一塊讀取出來,需要我們自己去掉,其實read()、readline()也是一樣
4、文件輸出
4.1 write()
向文件中寫入指定字符串。
import osfo = open('allen.txt', 'w+') while True:line = input('input content') # input不會保留換行符,需要自己加上系統(tǒng)的換行符if line != '.':fo.write('%s%s' % (line, os.linesep))else:break for line in fo.readlines():print(line) fo.close()如果我們分別輸入3行:
line4 line5 line6本來我們“allen.txt”文件中有以下三行:
line1 line2 line3加上我們輸入的3行應該是
line1 line2 line3 line4 line5 line6運行結果:
line4 line5 line6但結果并不是啊,原因是什么呢?還有為什么我們要加上os.linesep()
需要注意點:
1、以‘w/w+’模式打開的文件,如果文件存在則會覆蓋,如果文件不存在則會新建。
2、write()和read()一樣并不會操作換行符,需要使用os模塊下os.linesep()加上換行符,否則只會在一行上寫
4.2 writelines()
向文件中寫入一序列的字符串。
這一序列字符串可以是由迭代對象產(chǎn)生的,如一個字符串列表。
換行需要制定換行符 \n。
我們輸入3行
line1 line2 line3打開文件查看結果:
line1 line2 line35、文件定位移動
5.1 tell()
例子1:
fo = open('allen.txt', 'r') for line in fo.readline():print('本行內(nèi)容:%s,指針所在的位置:%d' % (line, fo.tell())) fo.close() 本行內(nèi)容:line1,指針所在的位置:6 本行內(nèi)容:line2,指針所在的位置:12 本行內(nèi)容:line3,指針所在的位置:18例子2:
fo = open('allen.txt', 'r') for line in fo.readlines():print('本行內(nèi)容:%s,指針所在的位置:%d' % (line, fo.tell())) fo.close() 本行內(nèi)容:line1,指針所在的位置:18 本行內(nèi)容:line2,指針所在的位置:18 本行內(nèi)容:line3,指針所在的位置:18從例子1和2中我們可以看出readline()讀取一行,指針的位置移動一行,readlines()是一下子讀取到尾部。
5.2 seek()
seek(offset[, whence]) :沒有返回值
offset -- 偏移量,也就是代表需要移動字節(jié)數(shù)
whence:可選,默認值為 0。表示要從哪個位置開始偏移;0代表從文件開頭開始算起,1代表從當前位置開始算起,2代表從文件末尾算起
6、文件迭代
file對象是一個可迭代的對象,可以使用for循環(huán)進行迭代
fo = open("allen.txt", "r") for content in fo:print(content) fo.close() line1line2line3內(nèi)功深厚的同學,應該發(fā)現(xiàn)了一個問題,上邊所有的例子我們再關閉文件的時候都是直接close(),試想一下,萬一中間出現(xiàn)異常了,close就執(zhí)行不了,為了保證無論是否出錯都能正確地關閉文件,我們可以使用 try ... finally :
try:f = open('allen.txt', 'r')print f.read() finally:if f:f.close()但是每次都這么寫實在太繁瑣,所以,Python 引入了 with 語句來自動幫我們調(diào)用 close() 方法:
with open('allen.txt', 'r') as f:f.read()是不是很簡潔,有木有
轉(zhuǎn)載于:https://www.cnblogs.com/suxianglun/p/9052718.html
總結
以上是生活随笔為你收集整理的Python文件基本操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 静态语言与动态语言
- 下一篇: 520戏精上身!纸短情长,一句顶一万句的