Python ファイル IO 操作を実行する場合、ファイルのセキュリティと保護は非常に重要です。この記事では主にPythonにおけるファイル権限管理とファイルのバックアップとリカバリに関する知識を紹介します。
ファイル権限管理
1. ファイルパーミッションの概念と機能
Linux および Windows システムでは、各ファイルには特定の権限があり、これにより、どのユーザーがファイルにアクセスまたは変更できるかが決まります。通常、読み取り (r)、書き込み (w)、実行 (x) の 3 つの権限が含まれます。で:
- 読み取り権限 (r) は、ユーザーにファイルの内容を表示することを許可します。
- 書き込み権限 (w) により、ユーザーはファイルの内容を変更できます。
- 実行権限 (x) により、ユーザーは実行可能ファイルを実行できます。
chmod コマンドを使用してファイルのアクセス許可を変更できます。Linux システムの場合、chmod a+x ファイルはすべてのユーザーに実行権限を追加することができ、chmod 600 ファイルはファイルの所有者のみが読み書きでき、他のユーザーには権限がないようにファイルを設定できます。
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 を使用してファイルのバックアップおよび回復機能を実装する方法
shutil モジュールを Python で使用して、ファイルのバックアップおよび回復機能を実装できます。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におけるファイル保護とセキュリティの知識点と実装方法でした。ファイル権利管理、ファイルのロック、ファイルのバックアップとリカバリ、自動バックアップとスケジュールされたバックアップなどのテクノロジを習得することで、ファイルのセキュリティをより適切に保護し、データの損失や損傷を防ぐことができます。
関連コンテンツの拡充:(技術フロンティア)
伝統的な企業でも大規模なデジタル化が始まったこの10年で、社内ツールの開発過程では、大量のページ、シーン、コンポーネントなどが常に繰り返されていることが分かりました。このホイールはエンジニアにとって多くの時間を無駄にしました。
このような問題に対応して、ローコードでは、特定の繰り返し発生するシナリオとプロセスを個別のコンポーネント、API、データベース インターフェイスに視覚化し、ホイールの繰り返し作成を回避します。プログラマーの生産性が大幅に向上しました。
プログラマーが知っておくべきソフトウェア JNPF 高速開発プラットフォームを推奨します。業界をリードする SpringBoot マイクロサービス アーキテクチャを採用し、SpringCloud モードをサポートし、プラットフォーム拡張の基盤を改善し、迅速なシステム開発、柔軟な拡張、シームレスな統合、高度なニーズを満たします。パフォーマンスアプリケーションなどの包括的な機能。フロントエンドとバックエンドの分離モードを採用し、フロントエンドとバックエンドの開発者が協力して異なるセクションを担当できるため、手間が省け便利です。
無料トライアル公式サイト: https: //www.jnpfsoft.com/?csdn
ローコード技術を理解していなくても、すぐに体験して習得できます。