天天看點

「萬能Python」-15-檔案處理

今日分享歌曲

歌名:遠方斜陽路

歌手:薰妮

音量:42%

檔案操作(I/O)

和其它程式設計語言一樣,Python 也具有操作檔案(I/O)的能力,比如打開檔案、讀取和追加資料、插入和删除資料、關閉檔案、删除檔案等。

除了提供檔案操作基本的函數之外,Python 還提供了很多子產品,例如 fileinput 子產品、pathlib 子產品等,通過引入這些子產品,我們可以獲得大量實作檔案操作可用的函數和方法(類屬性和類方法)。

Python中如何書寫檔案路徑

在 Windows 中,根檔案夾名為 D:\,也稱為 D: 盤。在 OS X 和 Linux 中,根檔案夾是 /。

絕對路徑與相對路徑

明确一個檔案所在的路徑,有 2 種表示方式,分别是:
  • 絕對路徑:總是從根檔案夾開始,Window 系統中以盤符(C:、D:)作為根檔案夾,而 OS X 或者 Linux 系統中以 / 作為根檔案夾。
  • 相對路徑:指的是檔案相對于目前工作目錄所在的位置。例如,目前工作目錄為 "C:\Windows\System32",若檔案 demo.txt 就位于這個 System32 檔案夾下,則 demo.txt 的相對路徑表示為 ".\demo.txt"(其中 .\ 就表示目前所在目錄)。
在使用相對路徑表示某檔案所在的位置時,除了經常使用 .\ 表示目前所在目錄之外,還會用到 ..\ 表示目前所在目錄的父目錄。
「萬能Python」-15-檔案處理

Python處理絕對路徑和相對路徑

Python os.path 子產品提供了一些函數,可以實作絕對路徑和相對路徑之間的轉換,以及檢查給定的路徑是否為絕對路徑,比如說:
  • 調用 os.path.abspath(path) 将傳回 path 參數的絕對路徑的字元串,這是将相對路徑轉換為絕對路徑的簡便方法。
  • 調用 os.path.isabs(path),如果參數是一個絕對路徑,就傳回 True,如果參數是一個相對路徑,就傳回 False。
  • 調用 os.path.relpath(path, start) 将傳回從 start 路徑到 path 的相對路徑的字元串。如果沒有提供 start,就使用目前工作目錄作為開始路徑。
  • 調用 os.path.dirname(path) 将傳回一個字元串,它包含 path 參數中最後一個斜杠之前的所有内容;調用 os.path.basename(path) 将傳回一個字元串,它包含 path 參數中最後一個斜杠之後的所有内容。

檔案打開

在 Python 中,如果想要操作檔案,首先需要建立或者打開指定的檔案,并建立一個檔案對象,而這些工作可以通過内置的 open() 函數實作。
open(file, mode='r')
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)           

參數說明:

  • file: 必需,檔案路徑(相對或者絕對路徑)。
  • mode: 可選,檔案打開模式
  • buffering: 設定緩沖
  • encoding: 一般使用utf8
  • errors: 報錯級别
  • newline: 區分換行符
  • closefd: 傳入的file參數類型
  • opener: 設定自定義開啟器,開啟器的傳回值必須是一個打開的檔案描述符。
  • mode 參數有:
r	隻讀模式打開檔案,讀檔案内容的指針會放在檔案的開頭。	 
rb	以二進制格式、采用隻讀模式打開檔案,讀檔案内容的指針位于檔案的開頭,一般用于非文本檔案,如圖檔檔案、音頻檔案等。
r+	打開檔案後,既可以從頭讀取檔案内容,也可以從開頭向檔案中寫入新的内容,寫入的新内容會覆寫檔案中等長度的原有内容。
rb+	以二進制格式、采用讀寫模式打開檔案,讀寫檔案的指針會放在檔案的開頭,通常針對非文本檔案(如音頻檔案)。
w	以隻寫模式打開檔案,若該檔案存在,打開時會清空檔案中原有的内容。若檔案存在,會清空其原有内容(覆寫檔案);反之,則建立新檔案。
wb	以二進制格式、隻寫模式打開檔案,一般用于非文本檔案(如音頻檔案)
w+	打開檔案後,會對原有内容進行清空,并對該檔案有讀寫權限。
wb+ 以二進制格式、讀寫模式打開檔案,一般用于非文本檔案
a	以追加模式打開一個檔案,對檔案隻有寫入權限,如果檔案已經存在,檔案指針将放在檔案的末尾(即新寫入内容會位于已有内容之後);反之,則會建立新檔案。	 
ab	以二進制格式打開檔案,并采用追加模式,對檔案隻有寫權限。如果該檔案已存在,檔案指針位于檔案末尾(新寫入檔案會位于已有内容之後);反之,則建立新檔案。	 
a+	以讀寫模式打開檔案;如果檔案存在,檔案指針放在檔案的末尾(新寫入檔案會位于已有内容之後);反之,則建立新檔案。	 
ab+	以二進制模式打開檔案,并采用追加模式,對檔案具有讀寫權限,如果檔案存在,則檔案指針位于檔案的末尾(新寫入檔案會位于已有内容之後);反之,則建立新檔案。           
file = open("test.py")
print(file)           
「萬能Python」-15-檔案處理

檔案關閉

file = open("test.py")

print(file)

file.close()

print(file)           
「萬能Python」-15-檔案處理

讀檔案

  1. Python read()函數
對于借助 open() 函數,并以可讀模式(包括 r、r+、rb、rb+)打開的檔案,可以調用 read() 函數逐個位元組(或者逐個字元)讀取檔案中的内容。
file = open("test.py",encoding = "utf-8")
print(file.read())           
「萬能Python」-15-檔案處理

寫檔案

Python 中的檔案對象提供了 write() 函數,可以向檔案中寫入指定内容。該函數的文法格式如下:

file.write(string)

f = open("a.txt", 'w')
f.write("寫入一行新資料")
f.close()
f1 = open("a.txt")
print(f1.read())
f1.close()           
「萬能Python」-15-檔案處理

按行讀

Python readline()函數readline() 函數用于讀取檔案中的一行,包含最後的換行符“\n”。此函數的基本文法格式為:
# 文法結構
file.readline([size])

# readline
f = open("a.txt")
#讀取一行資料
byt = f.readline()
print(byt)           
「萬能Python」-15-檔案處理
Python readlines()函數用于讀取檔案中的所有行
#  readlines
f = open("a.txt")
#讀取一行資料
byt = f.readlines()
print(byt)           
「萬能Python」-15-檔案處理
帶行号
file = open('a.txt', 'r')
for i, line in enumerate(file, start=1):
    print("Number %s: %s" % (i, line))             
「萬能Python」-15-檔案處理

按行寫

Python 的檔案對象中,不僅提供了 write() 函數,還提供了 writelines() 函數,可以實作将字元串清單寫入檔案中。需要注意的是,使用 writelines() 函數向檔案中寫入多行資料時,不會自動給各行添加換行符。
f = open('a.txt', 'r')
n = open('b.txt','w+')
n.writelines(f.readlines())
n.close()
f.close()
f1 = open("b.txt")
#讀取一行資料
byt = f1.readlines()
print(byt)           
「萬能Python」-15-檔案處理

删除檔案

import os

os.remove("b.txt")           

檢查和删除

import os
if os.path.exists("b.txt"):
    os.remove("b.txt")
else:
    print("The file does not exist")           
「萬能Python」-15-檔案處理

删除檔案夾

import os
# 删除空檔案夾
os.rmdir("D:\火柴人")           
「萬能Python」-15-檔案處理
import shutil
# 删除非空檔案夾
shutil.rmtree(r"D:\火柴人")           
「萬能Python」-15-檔案處理

總結

檔案操作是python中常見且常用的知識點,需要多鍛煉