1. 程式人生 > >Python學習筆記(四) IO程式設計

Python學習筆記(四) IO程式設計

1.讀檔案

使用open()函式開啟檔案,返回一個檔案物件,可選擇傳參模式和緩衝區,預設是讀模式,緩衝區是無
利用open()函式可以開啟檔案, 如下程式碼,open()的第二個引數是’r’,表示的是讀檔案,第三個引數encoding指定的是檔案的編碼格式.

filePath = 'D:/cc.txt'
f = open(filePath, 'r', encoding='UTF-8')
fileContent = f.read()
#文件使用完必須關閉,釋放資源
f.close()
print(fileContent)

由於在讀寫檔案的時候,也會發生異常,導致f.close()調不到,可以使用with語句來自動幫我們呼叫close()方法

with open(filePath, 'r', encoding='UTF-8') as readFile:
    print(readFile.read())

1.1讀取每一行

呼叫read()是讀取檔案全部內容到記憶體,如果檔案太大容易記憶體不足.
呼叫readline()每次讀取一行內容

with open('D:/caesar-local.log', 'r', encoding='UTF-8') as logFile:
    thisLine = logFile.readline()
    while thisLine:
        print(thisLine)
        thisLine = logFile.readline
()#再讀取一行

或者

with open('D:/caesar-local.log', 'r', encoding='UTF-8') as logFile:
   for line in logFile.readlines():
       print(line.strip())

2.寫檔案

寫檔案和讀檔案一樣,也是呼叫open()函式,區別是傳入的是’w’
以’w’模式寫入檔案時,如果檔案已存在,會直接覆蓋(相當於刪掉後新寫入一個檔案)。如果我們希望追加到檔案末尾怎麼辦?可以傳入’a’以追加(append)模式寫入

filePath = 'D:/cc.txt'
with
open(filePath, 'w') as f: f.write("Hello, pigg!")

3.序列化

3.1pickle模組來實現序列化

try:
    import cPickle as pickle
except ImportError:
    import pickle

#定義一個字典
d = dict(name='winter', age=13)
#dumps方法可將物件轉成str
str_d = pickle.dumps(d)
print('str_d = ', str_d)

#dump方法可以將序列化的物件直接寫入檔案中
f = open('d:/a.txt', 'wb')
pickle.dump(d, f)
f.close()

儲存到檔案裡的值是看不懂的位元組

€}q (X   nameqX   winterqX   ageqKu.

當我們要把物件從磁碟讀到記憶體時,可以先把內容讀到一個bytes,然後用pickle.loads()方法反序列化出物件,也可以直接用pickle.load()方法從一個file-like Object中直接反序列化出物件

d = pickle.loads(str_d)
print("d = ", d)

file = open('d:/a.txt', 'rb')
d = pickle.load(file)
file.close()
print(d)
d =  {'name': 'winter', 'age': 13}
{'name': 'winter', 'age': 13}

3.2JSON

Python內建的json模組提供了非常完善的Python物件到JSON格式的轉換。我們先看看如何把Python物件變成一個JSON

import json
user = dict(name='wd', age=28)
userJson = json.dumps(user)
print(userJson) #打印出{"name": "wd", "age": 28}