轉載請表明出處:https://www.cnblogs.com/shapeL/p/9141238.html
前提:文中例子介紹test.json內容:
hello
我們
326342
1.文件讀取
(1)打開文件open,默認是已讀模式打開文件
f = open('../dataconfig/test.json') print(f.read())
f.close() 輸出結果: hello 鎴戜滑 326342
read():一次性讀取文件所有內容
輸出結果中出現亂碼:需要給open函數傳入encoding參數
f = open('../dataconfig/test.json',encoding='utf-8') print(f.read())
f.close() 輸出結果: hello 我們 326342
(2)read(size):讀取部分數據
f = open('../dataconfig/test.json',encoding='utf-8') print(f.read(3))
f.close()
輸出結果: hel
(3)redline():每次讀取一行數據,逐行讀取文件內容
f = open('../dataconfig/test.json',encoding='utf-8') data = f.readline() while data: print(data) data = f.readline() f.close() 輸出結果: hello 我們 326342
輸出結果中每一行數據讀取之后都會空一行,解決方案:print(data.strip())或者print(data,end='')
(4)readlines():讀取文件所有行
f = open('../dataconfig/test.json',encoding='utf-8') data = f.readlines() print(data) print(type(data)) for line in data: print(line.strip()) f.close() 輸出結果: ['hello\n', '我們\n', '326342'] <class 'list'> hello 我們 326342
(5)linecache.getline():讀取某個特定行數據
import linecache data = linecache.getline('../dataconfig/test.json',1) print(data) 輸出結果: hello
總結:不同場景下讀取方式選擇
如果文件很小,read()一次性讀取最方便
如果不能確定文件大小,反復調用read(size)比較保險
如果是配置文件,調用readlines()最方便;redlines()讀取大文件會比較占內存
如果是大文件,調用redline()最方便
如果是特殊需求輸出某個文件的n行,調用linecache模塊
2.文件寫入
(1)'w'就是writing,以這種模式打開文件,原來文件中的內容會被新寫入的內容覆蓋掉,如果文件不存在,會自動創建文件
f = open('../dataconfig/test.json','w') f.write('hello,world!') f.close()
test.json文件內容:hello,world!
(2)‘’a’就是appendin:一種寫入模式,寫入的內容不會覆蓋之前的內容,而是添加到文件中
f = open('../dataconfig/test.json','a') f.write('hello,world!') f.close()
test.json文件內容:
hello
我們
326342hello,world!
3.上述讀寫文件例子看出,每次讀寫完之后,都要f.close()關閉文件,因為文件對象會占用操作系統的資源,並且操作系統同一時間能打開的文件數量也是有限的。
但是實際中,文件讀寫可能產生IOError,一旦出錯,后面的f.close()就不會調用。所以,為了保證任何時候都能關閉文件,可以使用try-finally來實現(finally內的代碼不管有無異常發生,都會執行)
try: f = open('../dataconfig/test.json', 'r') print(f.read()) finally: if f: f.close()
每次都這樣寫實在是麻煩,python中的with語句用法可以實現
with open('../dataconfig/test.json',encoding='utf-8') as f: print(f.read()) 輸出結果: hello 我們 326342
打開多個文件進行操作:
with open('../dataconfig/test.json',encoding='utf-8') as f1,open('../dataconfig/test1.json',encoding='utf-8') as f2,open('../dataconfig/test2.json',encoding='utf-8') as f3: for i in f1: j = f2.readline() k = f3.readline() print(i.strip(),j.strip(),k.strip())