天天看點

python裡面對檔案的讀寫操作

以下内容轉自:http://www.cnblogs.com/qi09/archive/2012/02/10/2344964.html和http://blog.csdn.net/xiaoqi823972689/article/details/12945769

python對檔案的讀操作用read,readline,readlines。

read可以接受一個變量以限制每次讀取的數量。read每次讀取整個檔案,并将檔案内容以字元串形式存儲。(見下面的例子)

對于連續的面向行的處理,它是不必要的,如果檔案大于記憶體,該方法也不可行。

readline和readlines較為相似,它們之間的差異是readlines一次讀取整個檔案,像read一樣。readlines自動将檔案内容按行處理成一個清單。

另一方面,readline每次隻讀取一行,通常比readlines慢很多,僅當沒有足夠記憶體可以一次讀取整個檔案時,才會用readline

看一下執行個體:

以fortext.txt文本為例:

python裡面對檔案的讀寫操作
#coding=utf-8
fo =open("H:/fortext.txt","r")
#case1
#print type(fo.readlines())  輸出結果為list類型
for line in  fo.readlines():
    print line
#case2
line = fo.readline()
#print type(fo.readline()) 輸出結果為str類型
print line
while line:
    print line
    line=   fo.readline()
#print type(fo.read())   輸出結果為str類型
           

最後的輸出結果都是:

python裡面對檔案的讀寫操作

對檔案的寫操作有write和writelines,(沒有WriteLine)

先用一個小小的例子來看看write和writelines到底是什麼

fi  =   open(r"H:/text.txt",'a+')     #a+表示打開一個檔案用于讀寫。如果該檔案已存在,
                                        # 檔案指針将會放在檔案的結尾。檔案打開時會是追加模式。
                                        #如果該檔案不存在,建立新檔案用于讀寫。(text.txt檔案還并未存在)
#fi.write("123");fi.seek(0,0);print fi.read()
#fi.writelines("123");fi.seek(0,0);print fi.read()
           

分别執行write和writelines,發現結果都是

python裡面對檔案的讀寫操作

writelines并不多加一個換行

百度之後發現;

百度‘write writelines python’第一條的結果是:

Use the write() function to write a fixed sequence of characters -- called a string -- to a file. You cannot use write() to write arrays or Python lists to a file. If you try to use write() to save a list of strings, the Python interpreter will give the error, "argument 1 must be string or read-only character buffer, not list."

write函數可以用來對檔案寫入一個字元串,但不能使用write 對檔案寫入一個數組或者list,如果你企圖使用write對檔案寫入一個字元串list表單,Python将報錯

即如果寫成

#write和writelines
fi  =   open(r"H:/text.txt",'a+')     #a+表示打開一個檔案用于讀寫。如果該檔案已存在,
                                        # 檔案指針将會放在檔案的結尾。檔案打開時會是追加模式。
                                        #如果該檔案不存在,建立新檔案用于讀寫。(text.txt檔案還并未存在)
#fi.write("123");fi.seek(0,0);print fi.read()   #必須加fi.seek;否則會因為fi.read函數而讀入亂碼
#fi.writelines("123");fi.seek(0,0);print fi.read()
fi.write(['1','2','3'])
           

這樣的話就會報錯。

python裡面對檔案的讀寫操作

繼續檢視百度,

The writelines() function also writes a string to a file. Unlike write(), however, writelines can write a list of strings without error. For instance, the command nameOfFile.writelines(["allen","hello world"]) writes two strings "allen" and "hello world" to the file foo.txt. Writelines() does not separate the strings, so the output will be "allenhello world."writelines同樣是對檔案寫入一個字元串,但是跟write不同的是,writelines可以操作list字元串。比如, 輸入指令 offile.writelines(["allen","hello world"]) 将兩個字元串"allen" and "hello world" 同時寫入了檔案foo.txt中。但writelines 并沒有分開這些字元串,輸出應該是"allenhello world."

如果将上面的fi.write修改成fi.writelines,檔案裡面就會寫入123.

另外,清單裡面的元素類型必須是字元串類型,這樣才能寫入檔案。