天天看點

Python基礎之檔案操作知識

檔案操作

  • 檔案操作的作用
  • 檔案的基本操作
  • 打開
  • 讀寫
  • 關閉
  • 檔案備份
  • 檔案和檔案夾的操作

一. 檔案操作的作用

思考:什麼是檔案?

[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-Lq3Z4E9A-1597498951213)(檔案操作.assets/1.jpg)]

思考:檔案操作包含什麼?

答:打開、關閉、讀、寫、複制…

思考:檔案操作的的作用是什麼?

答:讀取内容、寫入内容、備份内容…

總結:檔案操作的作用就是把一些内容(資料)存儲存放起來,可以讓程式下一次執行的時候直接使用,而不必重新制作一份,省時省力。

二. 檔案的基本操作

2.1 檔案操作步驟

  1. 打開檔案
  2. 讀寫等操作
  3. 關閉檔案
注意:可以隻打開和關閉檔案,不進行任何讀寫操作。

2.1.1 打開

在python,使用open函數,可以打開一個已經存在的檔案,或者建立一個新檔案,文法如下:

open(name, mode)      

name:是要打開的目标檔案名的字元串(可以包含檔案所在的具體路徑)。

mode:設定打開檔案的模式(通路模式):隻讀、寫入、追加等。

2.1.1.1 打開檔案模式
模式 描述
r 以隻讀方式打開檔案。檔案的指針将會放在檔案的開頭。這是預設模式。
rb 以二進制格式打開一個檔案用于隻讀。檔案指針将會放在檔案的開頭。這是預設模式。
r+ 打開一個檔案用于讀寫。檔案指針将會放在檔案的開頭。
rb+ 以二進制格式打開一個檔案用于讀寫。檔案指針将會放在檔案的開頭。
w 打開一個檔案隻用于寫入。如果該檔案已存在則打開檔案,并從開頭開始編輯,即原有内容會被删除。如果該檔案不存在,建立新檔案。
wb 以二進制格式打開一個檔案隻用于寫入。如果該檔案已存在則打開檔案,并從開頭開始編輯,即原有内容會被删除。如果該檔案不存在,建立新檔案。
w+ 打開一個檔案用于讀寫。如果該檔案已存在則打開檔案,并從開頭開始編輯,即原有内容會被删除。如果該檔案不存在,建立新檔案。
wb+ 以二進制格式打開一個檔案用于讀寫。如果該檔案已存在則打開檔案,并從開頭開始編輯,即原有内容會被删除。如果該檔案不存在,建立新檔案。
a 打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。也就是說,新的内容将會被寫入到已有内容之後。如果該檔案不存在,建立新檔案進行寫入。
ab 以二進制格式打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。也就是說,新的内容将會被寫入到已有内容之後。如果該檔案不存在,建立新檔案進行寫入。
a+ 打開一個檔案用于讀寫。如果該檔案已存在,檔案指針将會放在檔案的結尾。檔案打開時會是追加模式。如果該檔案不存在,建立新檔案用于讀寫。
ab+ 以二進制格式打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。如果該檔案不存在,建立新檔案用于讀寫。
2.1.1.2 快速體驗
f = open('test.txt', 'w')      
注意:此時的​

​f​

​​是​

​open​

​函數的檔案對象。

2.1.2 檔案對象方法

2.1.2.1 寫

  • 文法
對象對象.write('内容')      
  • 體驗
# 1. 打開檔案
f = open('test.txt', 'w')

# 2.檔案寫入
f.write('hello world')

# 3. 關閉檔案
f.close()      
注意:
  1. ​w​

    ​​和​

    ​a​

    ​​模式:如果檔案不存在則建立該檔案;如果檔案存在,​

    ​w​

    ​​模式先清空再寫入,​

    ​a​

    ​模式直接末尾追加。
  2. ​r​

    ​模式:如果檔案不存在則報錯。

2.1.2.2 讀

  • read()
檔案對象.read(num)      
num表示要從檔案中讀取的資料的長度(機關是位元組),如果沒有傳入num,那麼就表示讀取檔案中所有的資料。
  • readlines()

readlines可以按照行的方式把整個檔案中的内容進行一次性讀取,并且傳回的是一個清單,其中每一行的資料為一個元素。

f = open('test.txt')
content = f.readlines()

# ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']
print(content)

# 關閉檔案
f.close()      
  • readline()

readline()一次讀取一行内容。

f = open('test.txt')

content = f.readline()
print(f'第一行:{content}')

content = f.readline()
print(f'第二行:{content}')

# 關閉檔案
f.close()      

[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-ovfPLa7Z-1597498951218)(檔案操作.assets/image-20190222105332438.png)]

2.1.2.3 seek()

作用:用來移動檔案指針。

文法如下:

檔案對象.seek(偏移量, 起始位置)      
起始位置:
  • 0:檔案開頭
  • 1:目前位置
  • 2:檔案結尾

2.1.3 關閉

檔案對象.close()      

三. 檔案備份

需求:使用者輸入目前目錄下任意檔案名,程式完成對該檔案的備份功能(備份檔案名為xx[備份]字尾,例如:test[備份].txt)。

3.1 步驟

  1. 接收使用者輸入的檔案名
  2. 規劃備份檔案名
  3. 備份檔案寫入資料

3.2 代碼實作

  1. 接收使用者輸入目标檔案名
old_name = input('請輸入您要備份的檔案名:')      
  1. 規劃備份檔案名

    2.1 提取目标檔案字尾

    2.2 組織備份的檔案名,xx[備份]字尾

# 2.1 提取檔案字尾點的下标
index = old_name.rfind('.')

# print(index)  # 字尾中.的下标

# print(old_name[:index])  # 源檔案名(無字尾)

# 2.2 組織新檔案名 舊檔案名 + [備份] + 字尾
new_name = old_name[:index] + '[備份]' + old_name[index:]

# 列印新檔案名(帶字尾)
# print(new_name)      
  1. 備份檔案寫入資料

    3.1 打開源檔案 和 備份檔案

    3.2 将源檔案資料寫入備份檔案

    3.3 關閉檔案

# 3.1 打開檔案
old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')

# 3.2 将源檔案資料寫入備份檔案
while True:
    con = old_f.read(1024)
    if len(con) == 0:
        break
    new_f.write(con)

# 3.3 關閉檔案
old_f.close()
new_f.close()      

3.3 思考

如果使用者輸入​

​.txt​

​,這是一個無效檔案,程式如何更改才能限制隻有有效的檔案名才能備份?

答:添加條件判斷即可。

old_name = input('請輸入您要備份的檔案名:')

index = old_name.rfind('.')


if index > 0:
    postfix = old_name[index:]

new_name = old_name[:index] + '[備份]' + postfix

old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')

while True:
    con = old_f.read(1024)
    if len(con) == 0:
        break
    new_f.write(con)

old_f.close()
new_f.close()      

四. 檔案和檔案夾的操作

  1. 導入os子產品
import      
  1. 使用​

    ​os​

    ​子產品相關功能
os.函數名()      

4.1 檔案重命名

os.rename(目标檔案名, 新檔案名)      

4.2 删除檔案

os.remove(目标檔案名)      

4.3 建立檔案夾

os.mkdir(檔案夾名字)      

4.4 删除檔案夾

os.rmdir(檔案夾名字)      

4.5 擷取目前目錄

os.getcwd()      

4.6 改變預設目錄

os.chdir(目錄)      

4.7 擷取目錄清單

os.listdir(目錄)      

五.應用案例

  • 步驟
  1. 設定添加删除字元串的的辨別
  2. 擷取指定目錄的所有檔案
  3. 将原有檔案名添加/删除指定字元串,構造新名字
  4. os.rename()重命名
  • 代碼
import os

# 設定重命名辨別:如果為1則添加指定字元,flag取值為2則删除指定字元
flag = 1

# 擷取指定目錄
dir_name = './'

# 擷取指定目錄的檔案清單
file_list = os.listdir(dir_name)
# print(file_list)


# 周遊檔案清單内的檔案
for name in file_list:

    # 添加指定字元
    if flag == 1:
        new_name = 'Python-' + name
    # 删除指定字元
    elif flag == 2:
        num = len('Python-')
        new_name = name[num:]

    # 列印新檔案名,測試程式正确性
    print(new_name)
    
    # 重命名
    os.rename(dir_name+name, dir_name+new_name)      

六. 總結

  • 檔案操作步驟
  • 打開
檔案對象 = open(目标檔案, 通路模式)      
  • 操作
檔案對象.read()
檔案對象.readlines()
檔案對象.readline()      
檔案對象.write()      
  • seek()
  • 關閉
檔案對象.close()      
  • 主通路模式
  • w:寫,檔案不存在則建立該檔案
  • r:讀,檔案不存在則報錯
  • a:追加
  • 檔案和檔案夾操作
  • 重命名:os.rename()
  • 擷取目前目錄:os.getcwd()
  • 擷取目錄清單:os.listdir()