Python基礎——檔案操作

流楚丶格念發表於2020-10-17

一. 檔案操作的作用

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

二. 檔案的基本操作

2.1 檔案操作步驟

注意:可以只開啟和關閉檔案,不進行任何讀寫操作。

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')

注意:此時的fopen函式的檔案物件。

2.1.2 檔案物件方法

2.1.2.1 寫
  • 語法
物件物件.write('內容')
  • 體驗
# 1. 開啟檔案
f = open('test.txt', 'w')

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

# 3. 關閉檔案
f.close()

注意:

  1. wa模式:如果檔案不存在則建立該檔案;如果檔案存在,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()
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()

四. 檔案和資料夾的操作

在Python中檔案和資料夾的操作要藉助os模組裡面的相關功能,具體步驟如下:

  1. 匯入os模組
import os
  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)

相關文章