1. 程式人生 > 實用技巧 >Python自學之路-python檔案操作

Python自學之路-python檔案操作

二、open函式和open with

Ⅰ、open

格式:open("路徑","開啟方式")

開啟方式:'r'只讀模式, ‘w’寫模式,

‘a’追加模式 ,‘b’二進位制模式,‘+’讀/寫模式。

例子1:向檔案寫入“hello world!!!”,檔案不存在就建立

fh=open("d:/file1.txt","w")
words1="hello world!!!"
fh.write(words1)
fh.close()

例子2:讀取d盤file1.txt檔案的內容

fh2=open("d:/file2.txt","r")
data2=fh2.read()
print(data2)
>>輸出 hello world!!!

例子3:統計檔案中一行存在test的行數

count=0
fp=open("e:\\file.txt","r",encoding="utf-8")
lines=fp.readlines()
for i in lines:
    if "test" in i:
        print(i)
        count+=1
print(count)

Ⅱ、with open as

open讀寫時,每次讀寫完之後,都要f.close()關閉檔案,但是實際中,檔案讀寫可能產生IOError,一旦出錯,後面的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())

三、read和readlines()

Ⅰ、read

read()將檔案中的內容全部讀取出來,弊端 如果檔案很大就會非常的佔用記憶體,容易導致記憶體奔潰

f = open('path1/小娃娃.txt',mode='r',encoding='utf-8')
msg = f.read(3)
msg1 = f.read()
f.close()
print(msg)
print(msg1)

結果: 
高圓圓

劉亦菲
張柏芝
楊紫
王菲

Ⅱ、readline():readline()讀取每次只讀取一行

注意點:readline()讀取出來的資料在後面都有一個\n

f = open('path1/小娃娃.txt',mode='r',encoding='utf-8')
msg1 = f.readline()
msg2 = f.readline()
msg3 = f.readline()
msg4 = f.readline()
f.close()
print(msg1)
print(msg2)
print(msg3)
print(msg4)

結果:
高圓圓

劉亦菲

張柏芝

楊紫

解決這個問題只需要在我們讀取出來的檔案後邊加一個strip()就OK了

Ⅲ、readlines()

readlines() 返回一個列表,列表裡面每個元素是原檔案的每一行,如果檔案很大,佔記憶體,容易崩盤

f = open('log',encoding='utf-8')
print(f.readlines())
f.close()
# 結果['666666\n', 'fkja l;\n', 'fdkslfaj\n', 'dfsflj\n', 'df;asdlf\n', '\n', ]

Ⅳ、for迴圈讀取

可以通過for迴圈去讀取,檔案控制代碼是一個迭代器,他的特點就是每次迴圈只在記憶體中佔一行的資料,非常節省記憶體

f = open('../path1/弟子規',mode='r',encoding='utf-8')
for line in f:
    print(line)      #這種方式就是在一行一行的進行讀取,它就執行了下邊的功能

print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
f.close()