以下内容轉自: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文本為例:
#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類型
最後的輸出結果都是:
對檔案的寫操作有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,發現結果都是
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'])
這樣的話就會報錯。
繼續檢視百度,
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.
另外,清單裡面的元素類型必須是字元串類型,這樣才能寫入檔案。