Python面向對象之文件操作

来源:https://www.cnblogs.com/yifchan/archive/2019/05/13/python-1-21.html
-Advertisement-
Play Games

Python面向對象之文件操作 , 內容 文件的概念,文件的基本操作,文件/目錄的常用管理操作,文本文件的編碼格式。其中 文件的概念 包括 文件的概念和作用,文件的存儲方式;文件的基本操作 包括 文件操作步驟,操作文件的方法/函數,read方法,open函數,readline按行讀取文件內容;文件/... ...


文件的概念

文件的概念和作用

  1. 電腦的文件,就是存儲在某種長期存儲設備上的一段數據;長期存儲設備包括:U盤,硬碟,移動硬碟,光碟,等;
  2. 文件的作用:將數據長期保存,在需要的時候使用;

文件的存儲方式

在電腦中,文件是以二進位的形式保存在磁碟上的;

文本文件和二進位文件

文本文件

  • 可以用文本編輯軟體查看;
  • 本質上還是二進位文件;
    例如:python源文件。

二進位文件

  • 保存的文件不是直接給人閱讀的,而是提供給其他軟體使用的;
  • 二進位文件不能會用文本編輯軟體查看;
    例如:圖片文件,音頻文件等

文件的基本操作

文件操作步驟

在電腦中操作文件的步驟時分固定,一共包含三個步驟:

  1. 打開文件;
  2. 讀,寫文件;讀:將文本內容讀入記憶體;寫:將記憶體內容寫入文本;
  3. 關閉文件;

操作文件的方法/函數

在python中操作文件需要記住一個函數和兩個方法

序號 函數/方法 說明
1 open 打開文件,返迴文件操作對象;
2 read 將文件內容讀取到記憶體;
3 write 將指定內容寫入到文件;
4 close 關閉文件;
  • open函數負責打開文件,返迴文件操作對象;
  • 其餘三個方法需要通過文件對象調用;

read方法-讀取文件

open函數的第一個參數是要打開的文件名(文件名區分大小寫);

如果文件存在,返迴文件操作對象
如果文件不存在,會拋出異常

read方法可以一次性讀入並返迴文件的所有內容;
close方法負責關閉文件;
如果忘記關閉文件,會造成系統資源消耗,而且會影響到後續對文件的訪問;
註意:read方法執行後,會把文件指針移動到文件的末尾
提示:在開發中,通常會先編寫打開和關閉的代碼,再編寫中間針對文件的讀寫操作;

讀取文件示例

# 打開文件
file = open("hello.txt")
# 讀取文件
text = file.read()
print(text)
# 關閉文件
file.close()

# welcome to hello.txt
# this is a test file.

文件指針

  • 文件指針標識 從哪個位置開始讀取數據;
  • 第一次打開文件時,通常文件指針會指向文件的開始位置;
  • 當執行了read方法後,文件指針會移動到讀取內容的末尾;預設情況下會移動到文件末尾;

所以,如果在同一次打開文件中,執行了一次read方法,讀取所有內容,再次調用read方法的話,就不能夠再獲得內容了;這是因為第一次讀取之後,文件指針移動到了文件末尾,再次調用不會讀取到任何的內容;

文件指針示例

# 打開文件
file = open("hello.txt")
# 讀取文件
text = file.read()
print(text)
print(len(text))

print("-"*50)
# 再次讀取文件
text1 = file.read()
print(text1)
print(len(text1))

# 關閉文件
file.close()

# welcome to hello.txt
# this is a test file.
# 42
# --------------------------------------------------
# 0

open函數-打開文件的方式

open函數預設以只讀方式打開文件,並且返迴文件對象

open函數語法如下:

f = open("文件名", "訪問方式")

open打開文件情況羅列

訪問方式 說明
r 只讀方式打開文件。文件的指針將會放在文件的開頭,這是預設模式。如果文件不存在,拋出異常
w 只寫方式打開文件。如果文件存在會被覆蓋。如果文件不存在,創建新文件
a 追加方式打開文件。如果文件已存在,文件指針將會放在文件的結尾。如果文件不存在,創建新文件進行寫入。
r+ 讀寫方式打開文件。文件的指針將會放在文件的開頭。如果文件不存在,拋出異常。
w+ 讀寫方式打開文件。如果文件村子會被覆蓋。如果文件不存在,創建新文件。
a+ 讀寫方式打開文件。如果該文件已存在,文件指針將會放在文件的結尾。如果文件不存在,創建新文件進行寫入。

打開方式其實還有"rb","wb","wb+",...等,這是針對二進位文件的方式。

提示

  • 頻繁的移動文件指針,會影響文件的讀寫效率,開發中更多的時候會以只讀,只寫的方式來操作文件。

追寫文件示例

file = open("hello.txt", "a")
file.write("hello world")
file.close()

按行讀取文件內容

  • read方法預設會把文件的所有內容一次性讀取到記憶體;
  • 如果文件太大,對記憶體的占用會非常嚴重。

readline方法

  • readline方法可以一次讀取一行內容;
  • 方法執行後,會把文件指針移動到下一行,準備再次讀取;

讀取指定行數數據

file = open("hello.txt")

line1 = file.readline()
print(line1)
line2 = file.readline()
print(line2)

file.close()

# 1.welcome to hello.txt

# 2.this is a test file.

分行讀取整個文件:

hello.txt內容

1.welcome to hello.txt
2.this is a test file.

3.hello world

readline_test.py內容

file = open("hello.txt")

while 1:

    line = file.readline()
    print(line, end="")

    if not line:
        break
file.close()

# 運行結果
# 1.welcome to hello.txt
# 2.this is a test file.

# 3.hello world

小文件複製示例

# 打開文件
read_file = open("hello.txt")
write_file = open("hello_small.txt", "w")

# 讀寫文件
text = read_file.read()
write_file.write(text)

# 關閉文件
read_file.close()
write_file.close()

大文件複製示例

# 打開文件
read_file = open("hello.txt")
write_file = open("hello_big.txt", "w")

# 讀寫文件
while 1:
    # 讀取一行內容
    text = read_file.readline()
    # 判斷是否有內容
    if not text:
        break
    # 寫入複製文件
    write_file.write(text)

# 關閉文件
read_file.close()
write_file.close()

文件/目錄的常用管理操作

  • 在終端/文件瀏覽器中,可以執行常規的文件/目錄管理操作,例如:創建,重命名,刪除,改變路徑,查看目錄內容等等。
  • 在Python中,如果希望通過程式實現上述功能,需要導入os模塊。

文件操作方法羅列

序號 方法名 說明 示例
01 rename 重命名文件 os.rename(源文件名,目標文件名)
02 remove 刪除文件 os.remove(文件名)

目錄操作方法羅列

序號 方法名 說明 示例
01 listdir 目錄列表 os.listdir(目錄名)
02 mkdir 創建目錄 os.mkdir(目錄名)
03 rmdir 刪除目錄 os.rmdir(目錄名)
04 getcwd 獲取當前目錄 os.getcwd()
05 chdir 修改工作目錄 os.chdir(目標目錄)
06 path.isdir 判斷是否是文件 os.path.isdir(文件路徑)

提示:文件/目錄操作都支持絕對路徑/相對路徑

文本文件的編碼格式

  • 文本文件存儲的內容是基於字元編碼的文件,常見的編碼有ASCII編碼,UNICODE編碼等;
  • python2.x預設使用ASCII編碼;
  • python3.x預設使用UTF-8編碼;

ASCII編碼和UNICODE編碼

ASCII編碼

  • 電腦中只有256個ASCII字元;
  • 一個ASCII在記憶體中占用1個位元組的空間;而8個0/1的排列組合方式一共有256中,也就是2**8

UTF-8編碼

  • 電腦中使用的1-6個位元組來表示一個utf-8位元組,涵蓋了地球上幾乎所有地區的文字;
  • 大多數漢字會使用3個位元組來表示;
  • utf-8是UNICODE編碼的一種編碼格式。

python2.x中使用中文

在python2.x文件的第一行增加以下代碼,解釋器會以utf-8編碼來處理python文件;

# *-* coding:utf8 *-*

上面這種是官方推薦使用的,也可以使用下麵這種方式:

# coding=utf8

unicode字元串前加u

  • 在python2.x中,即使指定了文件使用utf-8的編碼格式,但是在遍歷字元串時,仍然會以位元組為單位遍歷字元串;
  • 要能夠正確的遍歷字元串,在定義字元串時,需要在字元串的引號前,增加一個小寫字母u,告訴解釋器這是一個unicode字元串(使用utf-8編碼格式的字元串)。

例如下麵的代碼:

test_str = "hello世界"
print(test_str)

在2和3下都會正確執行,但是當我們遍歷輸出字元串時,就會出現不一樣的情況;

test_str = "hello世界"
print(test_str)
for i in test_str:
    print(i)

在python3中可以正常執行以上代碼;
但是在python2中,可以輸出完整字元,遍歷時輸出的結果中"世界"顯示的是六行特殊字元;
解決為 定義字元串時,需要在字元串的引號前,增加一個小寫字母u。

示例如下:

test_str = u"hello世界"
print(test_str)
for i in test_str:
    print(i)

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 深入理解Java中的spi機制 全名為 是JDK內置的一種服務提供發現機制,是Java提供的一套用來被第三方實現或者擴展的API,它可以用來啟用框架擴展和替換組件。 = 基於介面的編程+策略模式+配置文件 的動態載入機制 Java SPI的具體約定如下: 當服務的提供者,提供了服務介面的一種實現之後 ...
  • 概覽 原子操作是指不會被線程調度機制打斷的操作,這種操作一旦開始,就一直運行到結束,中間不會有任何線程上下文切換。 原子操作可以是一個步驟,也可以是多個操作步驟,但是其順序不可以被打亂,也不可以被切割而只執行其中的一部分,將整個操作視作一個整體是原子性的核心特征。 在java中提供了很多原子類,筆者 ...
  • 基於flask的網頁聊天室(四) 前言 接前天的內容,今天完成了消息的處理 具體內容 上次使用了flask_login做用戶登錄,但是直接訪問login_requare裝飾的函數會報401錯誤,這裡可以自定義login_requare攔截後的操作: @login_manager.unauthoriz ...
  • 面向對象設計原則: 單一職責原則 SRP : 一個類或者行為只做一件事 。 降低代碼冗餘,提高可重用性,可維護性,可擴展性,可讀性 使用組合形式 單一職責原則 SRP : 一個類或者行為只做一件事 。 降低代碼冗餘,提高可重用性,可維護性,可擴展性,可讀性 使用組合形式 里氏替換原則 LSP : 所 ...
  • static:表示靜態的 static:可以用來修飾屬性、方法、代碼塊(或初始化塊)、內部類。 一、static修飾屬性(類變數): 1.由類創建的所有的對象,都共用這一個屬性。 2.當其中一個對象對此屬性進行修改,會導致其他對象對此屬性的一個調用。 VS 實例變數 (非 static 修飾的屬性, ...
  • 1. 內容大綱 1. 函數名的運用 2. 新特性:格式化輸出 3. 迭代器: 可迭代對象 獲取對象的方法 dir() 判斷一個對象是否是可迭代對象 小結 迭代器 迭代器的定義 判斷一個對象是否是迭代器 迭代器的取值 可迭代對象如何轉化成迭代器 while迴圈模擬for迴圈機制 小結 可迭代對象與迭代 ...
  • 最近由於項目需要,要用QT操作Word文檔。具體的工作需求:在指定的Word文檔(*.doc文件/*.docx文件)中查找關鍵字,找到後做高亮操作或者直接刪除操作,然後另存為到別的目錄(表示這個文件被操作過了)。 這個功能很簡單,確實挺簡單,但由於是第一次用QT操作Word文檔,所以仍需要經過一番查 ...
  • cv2.cvtColor(src, dst, code, dstCn)參數: src:輸入圖像 dst:輸出圖像,與輸入圖像具有相同大小和深度 code:色彩空間轉換代碼,例如cv2.COLOR_BGR2GRAY等 dstCn:目標圖像中的通道數;預設參數為0,從src和code自動導出通道介紹: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...