文章目錄
- 一、文件操作
- 1.概念
- 2.文件
- 3.二進制
- 二、基本文件操作
- 三、亂碼產生
- 四、with open() as f
- 五、代碼實現文件復制粘貼
- 六、try ... except ...
- 七、代碼比較
一、文件操作
1.概念
幫助我們把爬蟲抓下來的數據,進行保存。
2.文件
在計算機中,沒有pdf,word,txt,csv,image,video,music,excel概念,只有文件的概念。
一個成功的文件 = 成功的文件名 + 成功的文件內容,比如:
歌曲 = 告白氣球.mp3 + 歌曲的數據
視頻 = 告白氣球.mp4 + 視頻的數據
圖片 = 告白氣球.jpg + 圖片的數據
3.二進制
在計算機中,所有的圖片、視頻、音樂都是用二進制數據存儲的。
image,video,music 數據 == 二進制數據【binary】
二、基本文件操作
A、新建文件:用法如下
open(文件名, 操作方式[讀, 寫])
B、操作文件:用法如下
read() or write()
C、保存退出:用法如下
close()
代碼示例如下所示:
# 1.新建文件
f = open('Python.txt', 'w')# 2.操作文件
f.write('hello')# 3.保存退出
f.close()
說明:代碼中的f是電腦內存中虛擬的文件,將內容寫入后,通過close()方法把虛擬文件保存到本地
操作方式中的寫,常用的有三種:
- w:只能寫字符串 ----> 會覆蓋之前數據 ----> 要寫encoding=‘utf-8’
- a/a+:只能寫字符串 -----> 追加寫入數據 ----> 要寫encoding=‘utf-8’
- wb:寫入二進制數據 -----> 用于保存圖片、音樂、視頻 ----> 不能寫encoding=‘utf-8’
操作方式中的讀,有兩種:
- r:讀出來的是字符串 ----> 要寫encoding=‘utf-8’
- rb:讀出來的是二進制(幾乎不用) ----> 不能寫encoding=‘utf-8’
讀字符串這里需要注意,分為兩種讀取方式:
A、一次性讀取全部文件(用的不多):代碼示例如下
f = open('古詩.txt', 'r', encoding='utf-8')
data = f.read()
f.close()
print(data)
B、一行一行讀取文件(經常用):代碼示例如下
f = open('古詩.txt', 'r', encoding='utf-8')
for line in f:print(line.strip())
三、亂碼產生
如下代碼,當寫入中文內容時:
# 1.新建文件
f = open('Python.txt', 'w')# 2.操作文件
f.write('我愛你')# 3.保存退出
f.close()
運行代碼會發現出現亂碼,如下圖:
這是因為編碼和解碼方式不同導致的,解決方案如下模版:
open(文件名, 操作方式, encoding='utf-8')
注意:encoding=‘utf-8’ 只針對字符串的讀寫操作。
代碼示例如下所示:
# 1.新建文件
f = open('Python.txt', 'w', encoding='utf-8')# 2.操作文件
f.write('我愛你')# 3.保存退出
f.close()
四、with open() as f
上面我們創建文件到保存文件總公共使用了三步:
A、新建文件:open()
B、讀寫文件:read() or write()
C、關閉文件:close()
我們會發現很繁瑣,需要寫3行代碼,可以將A和C進行合并,合并之后的代碼是with open() as f,中間的B正常寫,open()里面也是正常寫,代碼示例如下:
with open('古詩.txt', 'r', encoding='utf-8') as f:for line in f:print(line.strip())
五、代碼實現文件復制粘貼
需求:實現03.py文本復制,思路如下:
- 先把03.py的文件內容讀出來
- 再把03.py的內容寫到新文件
具體代碼如下:
# 讀
with open('03.py', 'r', encoding='utf-8') as f:data = f.read()# 寫
with open('【新】03.py', 'a+', encoding='utf-8') as f:f.write(data)print('文件復制完成')
六、try … except …
該語句是用來處理異常,可以理解為:
try ... except ...
嘗試 ... 期望 ...
嘗試 執行xxxx代碼 如果xxxx代碼報錯了 執行期望部分
代碼示例如下所示:
# 1、導入請求庫
import requests
# 2、準備網址
url = 'https://pic.netbian.com/uploads/allimg/220131/012219-1643563339f065.jpg'
# 3、發送請求
data = requests.get(url).content
# 4、保存
file_name = '小姐姐.jpg'
try:with open(file_name, 'wb') as f:f.write(data)print('下載完成: {}'.format(file_name))
except:print('下載失敗: {}'.format(file_name))
七、代碼比較
如下圖所示兩組代碼:
兩組代碼功能上是一樣的,但是一般在開發中用下面這組代碼,更加美觀,所以之后異常處理用下面的代碼:
try:pass
except Exception as e:pass