爬蟲入門【7】Python-文件的讀寫和JSON


文本文檔的讀寫

最重要的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM