python3:文件讀寫+with open as語句

python3:文件讀寫+with open as語句
轉載請表明出處: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())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章