Python中文件操作和異常處理

文章目錄

  • 一、文件操作
    • 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()方法把虛擬文件保存到本地

操作方式中的,常用的有三種:

  1. w:只能寫字符串 ----> 會覆蓋之前數據 ----> 要寫encoding=‘utf-8’
  2. a/a+:只能寫字符串 -----> 追加寫入數據 ----> 要寫encoding=‘utf-8’
  3. wb:寫入二進制數據 -----> 用于保存圖片、音樂、視頻 ----> 不能寫encoding=‘utf-8’

操作方式中的,有兩種:

  1. r:讀出來的是字符串 ----> 要寫encoding=‘utf-8’
  2. 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文本復制,思路如下:

  1. 先把03.py的文件內容讀出來
  2. 再把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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14662.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14662.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14662.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux:linux基礎

Linux 一套免費使用和自由傳播的操作系統 linux特點 免費,開源,多用戶(同時允許多用戶操作同一個Linux系統),多任務(同時允許多個任務執行) linux版本 分為內核版和發行版 內核版 由linus torvalds及其團隊進行開發和維護 免費,開源 負責控制硬件 發行版 基于linux內…

Luat學習

萬物互聯的興起 人與人之間的連接已經變得越來越緊密,至少在中國這是一個不爭的事實。 人們的忙碌程度也達到了前所未有的水平,這時候人的通訊能力反而成為了瓶頸,人與外界的信息交換方式無外乎是嘴說、耳朵聽、眼睛看、手指敲、每秒的傳輸速…

根據配置的mode環境顯示不同的index模板

引言:在項目開發中,遇到了開發環境和生產環境使用模板不同的情況,配置如下: 一、vue.config.js const path require(path) function resolve(dir){return path.join(__dirname,dir) } module.exports {chainWebpack: config &g…

力扣226. 翻轉二叉樹(DFS的兩種思路)

Problem: 226. 翻轉二叉樹 文章目錄 題目描述思路復雜度Code 題目描述 思路 涉及二叉樹的遞歸解法時往往需要考慮兩種思路: 1.在遞歸遍歷時執行題目需要的具體要求; 2.將一個大問題分解為多個小子問題 具體到本體: 思路1:遍歷 先…

【源碼分享】簡單的404 HTML頁面示例,該頁面在加載時會等待2秒鐘,然后自動重定向到首頁

展示效果 源碼 html <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>404 頁面未找到</title><meta http-equiv"refresh" content"2;url/"> <!-- 設置2秒后跳轉到首…

機器學習云環境測試

等待創建完成后&#xff0c;點擊 PyTorch 打開&#xff0c;創建一個全新的 notebook 在 Cell 中輸入如下代碼&#xff0c;并點擊 Run 完成后點擊 New Cell &#xff0c;在 New Cell 中輸入如下代碼 輸入完成后點擊 Run &#xff0c;運行 New Cell 。&#xff08;每個 Cell 代…

1077: 平衡二叉樹的判定

解法&#xff1a; 平衡二叉樹是一種特殊的二叉樹&#xff0c;它滿足以下兩個條件&#xff1a; 左子樹和右子樹的高度差不超過1&#xff08;即&#xff0c;左右子樹高度差的絕對值不超過1&#xff09;。左子樹和右子樹都是平衡二叉樹。 后序遍歷過程中每次判斷左右子樹高度差…

python列表底層原理

Python 列表&#xff08;list&#xff09;是 Python 中非常常用的數據結構之一。它們的底層實現基于動態數組&#xff0c;具體來說&#xff0c;是一個可以動態調整大小的數組。這使得列表在操作和使用上非常靈活。以下是 Python 列表底層實現的主要原理&#xff1a; 動態數組 …

IT廉連看——UniApp——事件綁定

IT廉連看——UniApp——事件綁定 這是我們上節課最終的樣式&#xff1b; 一、現在我有這樣一個需求&#xff0c;當我點擊“生在國旗下&#xff0c;長在春風里”它的顏色由紅色變為藍色&#xff0c;該怎么操作&#xff1f; 這時候我們需要一個事件的綁定&#xff0c;綁定一個單…

使用 Docker 部署 Jenkins 并設置初始管理員密碼

使用 Docker 部署 Jenkins 并設置初始管理員密碼 每一次開始&#xff0c;我都特別的認真與膽怯&#xff0c;是因為我期待結局&#xff0c;也能夠不會那么粗糙&#xff0c;不會讓我失望&#xff0c;所以&#xff0c;就多了些思考&#xff0c;多了些拘束&#xff0c;所以&#xf…

【HCIP學習】STP協議

一、STP協議出現背景&#xff08;Spanning Tree Protocol&#xff0c;生成樹協議&#xff09; 二層環路帶來的問題&#xff1a;廣播風暴&#xff1b; MAC地址表的震蕩&#xff1b; 二、STP定義 stp是二層網絡中用于消除環路的協議&#xff0c;通過阻斷冗余鏈路來消除&#xff…

Flutter 中的 Hero 小部件:全面指南

Flutter 中的 Hero 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;Hero 動畫是一種流行的動畫效果&#xff0c;用于在不同路由&#xff08;頁面&#xff09;之間傳遞小部件&#xff0c;從而創建平滑的共享元素過渡效果。這種動畫可以增強用戶的視覺體驗&#xff0c;使…

加速度傳感器的沖擊振動的原始特征與解算(部分)

這里是工作中測得的一組數據&#xff0c;設備有多個加速度傳感器通道&#xff0c;我們可以看到沖擊振動發生前后&#xff0c;各個振動傳感器的的反饋以及其他的細化特征&#xff1a; 1.隨機振動&#xff08;加速度傳感器視角&#xff09; 2.沖擊振動&#xff08;加速度&#x…

Android Settings系統屬性讀寫

Settings系統屬性存儲均為xml&#xff0c;分三種&#xff1a; 1.global&#xff1a;所有的偏好設置對系統的所有用戶公開&#xff0c;第三方APP有讀沒有寫的權限&#xff1b; 源碼地址&#xff1a;frameworks/base/core/java/android/provider/Settings.java 對應xml路徑&…

C++ 網絡編程

一、Reactor 網絡編程模型 reactor 是一個事件處理模型。網絡處理:因為用戶層并不知道 IO 什么時候就緒,所以將對 IO 的處理轉化為對事件的處理。網絡模型構成: 非阻塞 IO:操作 IO,如果 IO 未就緒,IO 函數會立刻返回。IO 多路復用:檢測多路 IO 是否就緒。工作流程: 注冊…

【從零開始實現stm32無刷電機FOC】【理論】【1/6 電機旋轉本質】

目錄 電機旋轉需要什么樣的力&#xff1f;怎么產生力矢量&#xff1f;怎么產生任意的線圈磁矢量&#xff1f; 電機旋轉需要什么樣的力&#xff1f; 電機切向存在受力&#xff0c;電機就會旋轉。 進一步查看電機結構&#xff0c;分為轉子和定子&#xff0c;大部分情況下&#…

Spark的概述、核心、組成、運行模式

一、Spark概述 Apache Spark 是一個快速的, 多用途的集群計算系統, 相對于 Hadoop MapReduce 將中間結果保存在磁盤中, Spark 使用了內存保存中間結果, 能在數據尚未寫入硬盤時在內存中進行運算。Spark 是一個計算框架&#xff0c;可以用來代替Hadoop中的MapReduce計算框架。 二…

FIFO-Diffusion,一個無需額外訓練即可生成長視頻的框架。通過確保每個幀引用足夠多的先前幀來生成高質量、一致的長視頻。

簡單來講&#xff0c;FIFO-Diffusion先通過一些模型如VideoCraft2、zeroscope、Opem-Sora Plan等與FIFO-Diffusion的組合生成短視頻&#xff0c;然后取結尾的幀&#xff08;也可以取多幀&#xff09;&#xff0c;再用這一幀的圖片生成另一段短視頻&#xff0c;然后拼接起來。FI…

【MySQL精通之路】存儲引擎-MySQL8.0中的差異

存儲引擎是MySQL組件&#xff0c;用于處理不同表類型的SQL操作。 InnoDB是默認的、最通用的存儲引擎&#xff0c;Oracle默認使用其創建表。&#xff08;MySQL 8.0中的CREATE TABLE語句默認創建InnoDB表。&#xff09; MySQL Server使用可插拔存儲引擎體系結構&#xff0c;使存儲…

linux命令日常使用思考

linux命令日常使用思考 復制的相關問題scp和cp的區別root192.168.5.229-r的理解 更新版本的相關問題svn info 根目錄和家目錄的區別根目錄家目錄 復制的相關問題 scp和cp的區別 安全性&#xff1a;SCP 是基于 SSH 的加密傳輸協議&#xff0c;可以保證數據在傳輸過程中的安全性…