天天看點

學習Python檔案備份和恢複技術,讓您的資料永不丢失!

作者:你的老師父

在進行Python的檔案IO操作時,檔案的安全性和保護是非常重要的。本篇文章主要介紹Python中檔案權限管理以及檔案備份和恢複的相關知識。

檔案權限管理

1. 檔案權限的概念和作用

在Linux和Windows系統中,每個檔案都有一定的權限,這些權限決定了哪些使用者可以通路或修改檔案。通常包括讀取(r)、寫入(w)和執行(x)三個權限。其中:

  • 讀取權限(r)允許使用者檢視檔案内容;
  • 寫入權限(w)允許使用者修改檔案内容;
  • 執行權限(x)允許使用者運作可執行檔案。

可以使用chmod指令來修改檔案權限。對于Linux系統,chmod a+x file可以給所有使用者添加執行權限,chmod 600 file可以将檔案設定為隻有該檔案擁有者可以讀寫,其他使用者沒有任何權限。

2. 如何在 Linux 和 Windows 系統中設定檔案權限

在Python中,可以通過os子產品來設定檔案權限。os.chmod(path, mode)函數可以用來修改檔案或目錄的權限,其中path為檔案路徑,mode為權限值。例如,os.chmod("test.txt",0o777)可以将test.txt檔案的權限設定為所有人都可以讀、寫、執行。

在Windows系統中,可以使用pywin32子產品來設定檔案權限。具體實作方法如下:

import win32api
import win32con

def set_file_permission(file_path):
    """
    設定檔案權限為隻讀
    """
    # 擷取檔案屬性
    file_attribute = win32api.GetFileAttributes(file_path)
    # 設定檔案屬性,如果是隻讀則加上可寫标志,否則設定為隻讀。
    if (file_attribute & win32con.FILE_ATTRIBUTE_READONLY):
        win32api.SetFileAttributes(file_path, win32con.FILE_ATTRIBUTE_NORMAL)
    else:
        win32api.SetFileAttributes(file_path, win32con.FILE_ATTRIBUTE_READONLY)
           

3. 防止非法使用者通路和修改檔案

在Python中,可以使用檔案鎖定機制來防止多個程序同時通路同一個檔案。當一個程序通路檔案時,可以将該檔案鎖定,直到該程序完成操作後才釋放鎖。其他程序在該檔案被鎖定期間無法通路檔案。

可以使用flock函數來實作檔案鎖定。其中,fcntl.LOCK_EX表示獨占鎖定,fcntl.LOCK_SH表示共享鎖定。

import fcntl

# 獨占鎖定
def lock_ex(file):
    fcntl.flock(file.fileno(), fcntl.LOCK_EX)

# 共享鎖定
def lock_sh(file):
    fcntl.flock(file.fileno(), fcntl.LOCK_SH)

# 解鎖
def unlock(file):
    fcntl.flock(file.fileno(), fcntl.LOCK_UN)
           

示例代碼:

import os
import fcntl

def read_file(file_path):
    with open(file_path, 'r') as f:
        lock_sh(f)
        content = f.read()
        unlock(f)
    return content

def write_file(file_path, content):
    with open(file_path, 'w') as f:
        lock_ex(f)
        f.write(content)
        unlock(f)

if __name__ == '__main__':
    file_path = 'test.txt'
    if os.path.exists(file_path):
        print(read_file(file_path))
    else:
        write_file(file_path, 'Hello World!')
           

檔案備份和恢複

1. 檔案備份和恢複的必要性和應用場景

檔案備份和恢複是非常重要的,可以防止資料丢失或損壞。在實際應用中,檔案備份和恢複通常用于以下場景:

  • 防止系統崩潰導緻資料丢失;
  • 防止誤操作删除或修改了重要檔案;
  • 備份資料庫等重要資料。

2. 如何使用 Python 實作檔案備份和恢複功能

Python中可以使用shutil子產品來實作檔案備份和恢複功能。shutil.copy(src, dst)函數可以将src檔案複制到dst目錄下。shutil.move(src, dst)函數可以将src檔案移動到dst目錄下。此外,可以使用os.path.exists(path)函數判斷一個檔案是否存在。

示例代碼:

import shutil
import os
import time

def backup_file(file_path):
    if os.path.exists(file_path):
        backup_dir = os.path.join(os.path.dirname(file_path), 'backup')
        if not os.path.exists(backup_dir):
            os.mkdir(backup_dir)
        backup_file_name = os.path.basename(file_path) + '_' + \
                           time.strftime('%Y%m%d%H%M%S', time.localtime()) + '.bak'
        backup_file_path = os.path.join(backup_dir, backup_file_name)
        shutil.copy(file_path, backup_file_path)
        return backup_file_path
    else:
        print('File not exists!')
        return None

def restore_file(backup_file_path, target_file_path):
    if os.path.exists(backup_file_path):
        shutil.move(backup_file_path, target_file_path)
        return True
    else:
        print('Backup file not exists!')
        return False

if __name__ == '__main__':
    file_path = 'test.txt'
    backup_file_path = backup_file(file_path)
    print('Backup file path:', backup_file_path)
    restore_file(backup_file_path, file_path)
           

3. 自動備份和定時備份的實作方法

自動備份和定時備份可以使用Python的定時任務庫——APScheduler來實作。可以通過設定定時器來定期備份檔案。APScheduler提供了多種觸發器,例如IntervalTrigger、CronTrigger等。

示例代碼:

import shutil
import os
import time
from apscheduler.schedulers.blocking import BlockingScheduler

def backup_file(file_path):
    if os.path.exists(file_path):
        backup_dir = os.path.join(os.path.dirname(file_path), 'backup')
        if not os.path.exists(backup_dir):
            os.mkdir(backup_dir)
        backup_file_name = os.path.basename(file_path) + '_' + \
                           time.strftime('%Y%m%d%H%M%S', time.localtime()) + '.bak'
        backup_file_path = os.path.join(backup_dir, backup_file_name)
        shutil.copy(file_path, backup_file_path)
        return backup_file_path
    else:
        print('File not exists!')
        return None

def restore_file(backup_file_path, target_file_path):
    if os.path.exists(backup_file_path):
        shutil.move(backup_file_path, target_file_path)
        return True
    else:
        print('Backup file not exists!')
        return False

def job():
    file_path = 'test.txt'
    backup_file_path = backup_file(file_path)
    print('Backup file path:', backup_file_path)

if __name__ == '__main__':
    # 定義定時任務,每10秒執行一次
    scheduler = BlockingScheduler()
    scheduler.add_job(job, 'interval', seconds=10)
    scheduler.start()
           

以上就是Python IO中檔案保護與安全方面的知識點和實作方法。通過掌握檔案權限管理、檔案鎖定、檔案備份和恢複以及自動備份和定時備份等技術,可以更好地保護檔案安全,防止資料丢失和損壞。