文本文檔的讀寫
最重要的open()方法將返回一個file對象,經常使用的兩個參數為open(filename,mode)
其中,filename為file保存的地址,可以是本地地址,相對地址或者絕對地址。
mode對象為對file對象進行的操作
'''對這個方法進行一些解釋
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
file就是要操作的文件的地址,這個文件如果不存在,會創建;如果存在會打開;
mode參數:
r
以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。
rb
以二進制格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是默認模式。
r+
打開一個文件用於讀寫。文件指針將會放在文件的開頭。
rb+
以二進制格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。
w
打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
wb
以二進制格式打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
w+
打開一個文件用於讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
wb+
以二進制格式打開一個文件用於讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
a
打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。
ab
以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。
a+
打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。
ab+
以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用於讀寫。
encoding參數用於控制對文件的解碼或者編碼
'''
接下來,對這個file對象來解釋一下概念和方法,首先是讀取的方法:
read()方法
會將所有內容一次性打印出來
read(size)方法,可以限定讀取內容的大小,size是字符的數量吧,大約是這樣
舉個例子,假如當前路徑下面有個workfile.txt,文件,里面的內容是這樣的:
/Hello World!
1+2=?
明天天氣如何?/
f=open('workfile.txt','r',encoding='utf-8')
print(f.read())
f.close()#一定要記得將文件流關閉
Hello World!
1+2=?
明天天氣如何?
如果read沒有傳入任何參數,那么會將文件中所有的內容都會被打印出來。
比較適合文件很小的情況。那么如果文件很大,怎么辦呢?
read(size)方法適合這種情況:
f=open('workfile.txt','r',encoding='utf-8')
print(f.read(10))
f.close()#一定要記得將文件流關閉
Hello Worl
你看,打印出了10個字符~~
readline()方法
該方法會讀取file中的一行,如果沒有讀取到最后,還可以繼續使用readline方法獲取下一行。
f=open('workfile.txt','r',encoding='utf-8')
print(f.readline())#打印出第一行
print(f.readline())#打印出第二行,由於我們第二行是空行,所以沒有內容顯示出來。
print(f.readline())#好了,第三行出來了。
#f.close()
Hello World!
可以看出,如果使用readline()方法,將不斷的打印。
readlines()方法
從文件流中讀取並且返回一個行的list。
此時,我們也學習一個比較方便的打開文件的方法,不用再惦記f.close()啦。
那就是with as語句,舉個栗子~
with open('workfile.txt','r',encoding='utf-8') as file:
for line in file.readlines():
print(line.strip())
Hello World!
1+2=?
明天天氣如何?
Write()方法
f.write(string)將字符串格式的內容寫到文件中,返回寫入的字符數。
如果是其他格式的內容,使用str()方法轉換之后再傳入。
還有writelines()方法。
>>> f.write('This is a test\n')
>>>15
f=open('workfile.txt','a',encoding='utf-8')
f.write('\n')
f.write('這是寫入的第一行~\n')
f.close()
Hello World!
1+2=?
明天天氣如何?
這是寫入的第一行~
f.tell()方法
f.tell() 返回文件對象當前所處的位置, 它是從文件開頭開始算起的字節數。
f.seek()方法
如果要改變文件當前的位置, 可以使用 f.seek(offset, from_what) 函數。
from_what 的值, 如果是 0 表示開頭, 如果是 1 表示當前位置, 2 表示文件的結尾,例如:
seek(x,0) : 從起始位置即文件首行首字符開始移動 x 個字符
seek(x,1) : 表示從當前位置往后移動x個字符
seek(-x,2):表示從文件的結尾往前移動x個字符
from_what 值為默認為0,即文件開頭。
JSON文件的讀寫
JSON是一種輕量級的數據交換格式。
Python中包含了json模塊來對JSON進行編解碼。
主要應用的兩個函數為:
json.dumps(): 對數據進行編碼。
json.loads(): 對數據進行解碼。
在json的編解碼過程中,python的原始類型會與json類型進行相互轉換。
如果你要處理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 來編碼和解碼JSON數據。
Python和JSON類型轉換對應:
JSON----------Python
object--------dict
array---------list
string---------str
number(int)----int
number(real)---float
true-----------True
false----------False
null-----------None
下面我們展示幾個栗子:
import json
data={
'admin':'admin',
'url':'http://www.baidu.com',
'password':'somepassword'
}
json_str=json.dumps(data)
print('Python原始數據',repr(data))
print('JSON格式',json_str)
Python原始數據 {'admin': 'admin', 'url': 'http://www.baidu.com', 'password': 'somepassword'}
JSON格式 {"admin": "admin", "url": "http://www.baidu.com", "password": "somepassword"}
輸出結果很相似。
如果要想這個data寫入文件的話,是這樣的代碼:
import json
data={
'admin':'admin',
'url':'http://www.baidu.com',
'password':'somepassword'
}
with open('data.json','w') as f:
json.dump(data,f)
#當前路徑下會出現data.json文件,里面的內容和上面的類似。
我們在展示一下如何從文件中讀取json:
import json
with open('data.json','r') as f:
data=json.load(f)
print(data)
print("data['url']:",data['url'])#可以看出,讀取的json文件可以看成一個字典操作。
#輸出結果如下:
{'url': 'http://www.baidu.com', 'admin': 'admin', 'password': 'somepassword'}
data['url']: http://www.baidu.com

