Python爬蟲基礎文件操作

文件操作

引言

爬蟲爬取的一切內容都是在內存進行的,這樣會有什么問題嗎?如果一旦短電或著發生意外電腦關機了那么你的工作成果將瞬間消失。所以,我們還缺少數據在本地文件系統進行持久化的能力,簡單的來說就是文件讀寫操作。文件讀寫操作在爬蟲中是必不可缺少的一部分。

文件打開

Python中內置了一個open()方法,用于對文件讀寫操作。使用open()方法操作文件可以分三步,一是打開文件,二是操作文件,三是關閉文件。

文件句柄/文件描述符

open()方法返回值是一個file對象,可以將它賦值給一個變量,這個變量就是所謂的文件句柄

file對象

可以調用read()和write()方法,對打開的文件進行讀寫操作

open方法的語法

f = open(fliename,mode)

filename

一個包含了你要訪問的文件名稱的字符串值,通常是文件路徑。文件路徑作用:定位到指定文件

mode

打開文件的模式,默認是只讀r

文件打開的模式

常規文件打開模式操作示例

b模式:

二進制模式,通常用于讀取圖片、視頻等二進制文件,注意,它在讀寫的時侯以bytes類型讀寫的,因此獲得的是bytes對象而不是字符串在這個讀寫過程中,需要自己指定編碼格式。在使用帶b的模式一定要注意傳入的數據類型,確保為bytes類型。

+模式:

對于w+模式,在讀寫之前都會清空文件的內容,建議不要使用。

對于a+模式,永遠只能在文件末尾寫入,有局限性。

對于r+模式,也就是讀寫模式,配合seek()和tell()方法可以實現更多操作

編碼問題

要讀取非utf-8文件,需要給open()函數傳入encoding參數,例如,讀取GBK編碼的文件。

遇到一些編碼不規范的文件,可能會拋出UnicodeDecodeError異常這表示在文件中可能摻雜了一些非法編碼的。遇到這種情況可以提供errors='ignore'參數,表示如果遇到編碼錯誤后如何處理。

文件對象操作

每當我們用open()方法打開文件時,將返回文件對象。這個對象內置了很多操作方法。

f.read(size)#size讀取數據的個數

讀取一定大小的數據,然后作為字符串或字節對象返回,size是一個可選的數字類型的參數,用于指定讀取的數據量。當size被忽略了或者為負值,那么該文件的所有內容都將被讀取并且返回。

注意:如果文件體積較大,建議不要使用read()方法一次性讀入內存,而是read(512)一點一點的讀。

f.readline()

從文件一行讀取n內容。換行'\n'。如果返回一個空字符串,說明已經讀取到最后一行。這種方法通常是讀一行處理一行,并且不能回頭讀過的行不能在讀了。

f.readlines()

件文件中所有的行,一行一行全部讀入一個列表內,按順序一個一個全部讀入列表內,并返回這個列表。readlines方法一次性將文件全部讀入內存,所以也存在一定的問題。但是它有個好處,每行都保存在列表里,可以隨意存取。

fp = open('./text.txt','r')
text = for.read(10) #讀取指定字節的數據
text_line = fp.readline() #一次讀取一行數據
text_lines = fp.readlines() #讀取多行數據返回一個列表
print(text_lines)
fq.close()

f.seek()

如果需要改變文件指針的位置,可以使用f.seek(offset,from_what)方法。seek()經常和tell()方法配合使用。

from_what

如果是0表示從文件開頭計算

如果是1表示表示從文件讀寫指針的當前位置開始計算

2表示從文件結尾開始計算,默認是0

offset:表示偏移量

seek(x,0):從文件首行首字符開始移動x個字節

seek(x,1):表示從當前位置往后移動x個字節

seek(-x,2):表示從文件的末尾往前移動x個字節

fp=open('./text.txt','r')
fp.seek(9,0)
text=fp.read(5)
print(text)

f.tell()

返回文件讀寫指針當前所處的位置,它是從文件開頭開始算起的字節數。一定要注意是字節數,而不是字符數。

fp=open('./text.txt','r')
print(fp.tell)
fp.close()

f.write()

將字符串或bytes類型的數據寫入文件內。write()動作可以多次重復進行,其實都是在內存中操作,并不會立刻寫入硬盤,直到執行close()方法后,才會將所有的的寫入操作反映到硬盤上,在這個過程中,如果想將內存中修改,立刻保存到硬盤上,可以使用f.flush()方法。

fp=open('./text.txt','w')
fp.write('hello')
fp.close() #清空后寫入
fp=open('./text.txt','a')
fp.write('hello')
fp.close() #追加

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

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

相關文章

OpenCV中的邊緣檢測

邊緣檢測是圖像處理和計算機視覺中的關鍵技術之一,旨在識別圖像中像素強度發生顯著變化的區域,這些區域通常對應于物體的邊界或輪廓。邊緣檢測在機器視覺中具有重要的需求背景,主要體現在以下幾個方面: 圖像分割:邊緣…

【簡歷優化】性能調優 — 編程性能調優篇

😊你好,我是小航,一個正在變禿、變強的文藝傾年。 🔔本文講解【簡歷優化】性能調優 — 編程性能調優篇,期待與你一同探索、學習、進步,一起卷起來叭! 目錄 一、編程性能調優字符串String 發展優…

深入理解 MySQL 8 C++ 源碼:SELECT MOD(MONTH(NOW()), 2) 的函數執行過程

MySQL 作為最流行的關系型數據庫之一,其內部實現機制一直是開發者探索的熱點。本文將以一條簡單的 SQL 查詢 SELECT MOD(MONTH(NOW()), 2) 為例,深入分析 MySQL 8 源碼中內置函數 MOD、MONTH 和 NOW 的執行過程,揭示其底層實現邏輯。 一、SQL…

RNN中遠距離時間步梯度消失問題及解決辦法

RNN中遠距離時間步梯度消失問題及解決辦法 RNN 遠距離時間步梯度消失問題LSTM如何解決遠距離時間步梯度消失問題 RNN 遠距離時間步梯度消失問題 經典的RNN結構如下圖所示: 假設我們的時間序列只有三段, S 0 S_{0} S0? 為給定值,神經元沒有…

Tomcat理論(Ⅰ)

目錄 服務器流程圖一覽 一、JavaWeb前奏(了解) 1. C/S結構 2. B/S結構 3. 靜態網頁&動態網頁 4.常見的網頁 5.Web服務器 知名服務器: ?編輯 二、Tomcat安裝(熟練) 1.Tomcat概述 2.Tomcat的作用 3.Tomcat安裝 4.Tomcat測試 3.…

如何使用 DeepSeek R1 構建開源 ChatGPT Operator 替代方案

開源大型語言模型(LLMs)的興起使得創建 AI 驅動的工具比以往任何時候都更容易,這些工具可以與 OpenAI 的 ChatGPT Operator 等專有解決方案相媲美。在這些開源模型中,DeepSeek R1 以其強大的推理能力、自由的可訪問性和適應性而脫…

使用Docker Desktop部署GitLab

1. 環境準備 確保Windows 10/11系統支持虛擬化技術(需在BIOS中開啟Intel VT-x/AMD-V)內存建議≥8GB,存儲空間≥100GB 2. 安裝Docker Desktop 訪問Docker官網下載安裝包安裝時勾選"Use WSL 2 instead of Hyper-V"(推薦…

【復習】Java集合

集合概念 集合與數組 數組是固定長度;集合是動態長度的數據結構,需要動態增加或刪除元素 數組可以包含基本數據類型和對象;集合只能包含對象 數組可以直接訪問元素;集合需要通過迭代器訪問元素 線程安全的集合? …

vue3 文件類型傳Form Data數據格式給后端

在 Vue 3 中,如果你想將文件(例如上傳的 Excel 文件)以 FormData 格式發送到后端,可以通過以下步驟實現。這種方式通常用于處理文件上傳,因為它可以將文件和其他數據一起發送到服務器。 首先,創建一個 Vue…

使用 INFINI Console 配置集群監控 Webhook 通知指南

在集群管理中,監控關鍵指標如CPU、內存、磁盤、JVM等是至關重要的。對于Easysearch及ES生態系統,還需要關注集群本身的指標,例如搜索延遲、集群狀態、節點移除等。INFINI Console不僅提供了默認的監控指標,還支持用戶自定義監控項…

WPF的頁面設計和實用功能實現

目錄 一、TextBlock和TextBox 1. 在TextBlock中實時顯示當前時間 二、ListView 1.ListView顯示數據 三、ComboBox 1. ComboBox和CheckBox組合實現下拉框多選 四、Button 1. 設計Button按鈕的邊框為圓角,并對指針懸停時的顏色進行設置 一、TextBlock和TextBox…

二級公共基礎之數據結構與算法篇(八)排序技術

目錄 前言 一、交換類排序 1.冒泡排序法 1. 冒泡排序的思想 2. 冒泡排序的實現步驟 3. 示例 4. 冒泡排序的特點 2.快速排序 1. 快速排序的核心思想 2. 快速排序的實現步驟 3. 示例代碼(C語言) 4. 快速排序的特點 二、插入類排序 1. 簡單插入排序 1.簡單插入排…

記錄一次 ALG 的處理過程

前幾天朋友找我幫忙,說碰到很大困難了,實際上,不過如此 現象是這樣的: FreeSWITCH mod_unimrcp 工作不正常 FS 和 mrcp-server 兩邊同時抓包,看到的是: sip 流程正常 FS TCP 連接到 mccp-server 失敗&…

【Linux網絡編程】IP協議格式,解包步驟

目錄 解析步驟 1.版本字段(大小:4比特位) 2.首部長度(大小:4比特位)(單位:4字節) 🍜細節解釋: 3.服務類型(大小:8比特…

CSDN文章質量分查詢系統【贈python爬蟲、提分攻略】

CSDN文章質量分查詢系統 https://www.csdn.net/qc 點擊鏈接-----> CSDN文章質量分查詢系統 <------點擊鏈接 點擊鏈接-----> https://www.csdn.net/qc <------點擊鏈接 點擊鏈接-----> CSDN文章質量分查詢系統 <------點擊鏈接 點擊鏈…

HTML應用指南:利用GET請求獲取全國瀘溪河門店位置信息

隨著新零售業態的快速發展,門店位置信息的獲取變得越來越重要。作為新興烘焙品牌之一,瀘溪河自2013年在南京創立以來,一直堅持“健康美味,香飄世界”的企業使命,以匠人精神打造新中式糕點。為了更好地理解和利用這些數據,本篇文章將深入探討GET請求的實際應用,并展示如何…

如何在 React 中測試高階組件?

在 React 中測試高階組件可以采用多種策略&#xff0c;以下是常見的測試方法&#xff1a; 1. 測試高階組件返回的組件 高階組件本身是一個函數&#xff0c;它返回一個新的組件。因此&#xff0c;可以通過測試這個返回的組件來間接測試高階組件的功能。通常使用 Jest 作為測試…

R語言Stan貝葉斯空間條件自回歸CAR模型分析死亡率多維度數據可視化

全文鏈接&#xff1a;https://tecdat.cn/?p40424 在空間數據分析領域&#xff0c;準確的模型和有效的工具對于研究人員至關重要。本文為區域數據的貝葉斯模型分析提供了一套完整的工作流程&#xff0c;基于Stan這一先進的貝葉斯建模平臺構建&#xff0c;幫助客戶為空間分析帶來…

Casbin 權限管理介紹及在 Go 語言中的使用入門

引言 在現代軟件開發過程中&#xff0c;權限管理是一個至關重要的環節&#xff0c;它關系到系統的安全性和用戶體驗。Casbin 是一個強大的訪問控制庫&#xff0c;支持多種訪問控制模型&#xff0c;如 ACL&#xff08;訪問控制列表&#xff09;、RBAC&#xff08;基于角色的訪問…

快速入門——第三方組件element-ui

學習自嗶哩嗶哩上的“劉老師教編程”&#xff0c;具體學習的網站為&#xff1a;10.第三方組件element-ui_嗶哩嗶哩_bilibili&#xff0c;以下是看課后做的筆記&#xff0c;僅供參考。 第一節 組件間的傳值 組件可以有內部Data提供數據&#xff0c;也可由父組件通過prop方式傳…