برنامه نویسی

راهنمای سیستم فایل پایتون: 10 عملیات ضروری با مثال کد [2024]

من به عنوان یک نویسنده پرفروش ، شما را دعوت می کنم تا کتابهای من را در آمازون کشف کنید. فراموش نکنید که مرا در متوسط ​​دنبال کنید و پشتیبانی خود را نشان دهید. ممنون حمایت شما به معنای جهان است!

عملکرد و مدیریت سیستم فایل پایتون

پایتون ابزارهای قدرتمندی را برای عملکرد سیستم فایل فراهم می کند. من سالهاست که با این تکنیک ها کار کردم و بینش های عملی را که در برنامه های دنیای واقعی بسیار ارزشمند بوده است به اشتراک می گذارم.

ماژول Pathlib نحوه کنترل مسیرهای فایل را در پایتون تغییر می دهد. این یک رابط کاربری شی گرا را ارائه می دهد که باعث می شود دستکاری مسیر بصری و ایمن باشد. در اینجا نحوه استفاده من به طور معمول از آن آورده شده است:

from pathlib import Path

# Create and manage paths
base_dir = Path('/home/user/documents')
file_path = base_dir / 'data' / 'report.txt'

# File operations
file_path.write_text('Hello World')
content = file_path.read_text()
stats = file_path.stat()

# Directory operations
new_dir = base_dir / 'new_folder'
new_dir.mkdir(parents=True, exist_ok=True)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نظارت بر تغییرات سیستم فایل برای بسیاری از برنامه ها بسیار مهم است. کتابخانه Watchdog در این کار عالی است:

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time

class ChangeHandler(FileSystemEventHandler):
    def on_modified(self, event):
        if not event.is_directory:
            print(f"Modified: {event.src_path}")

    def on_created(self, event):
        print(f"Created: {event.src_path}")

observer = Observer()
observer.schedule(ChangeHandler(), ".", recursive=True)
observer.start()

try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    observer.stop()
observer.join()
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

فایلهای نقشه برداری شده از حافظه با استفاده از MMAP می توانند عملکرد را هنگام برخورد با پرونده های بزرگ بهبود بخشند:

import mmap
import os

def process_large_file(filename):
    with open(filename, 'r+b') as f:
        mm = mmap.mmap(f.fileno(), 0)
        # Process file in chunks
        chunk_size = 1024 * 1024  # 1MB chunks
        for i in range(0, len(mm), chunk_size):
            chunk = mm[i:i + chunk_size]
            # Process chunk
        mm.close()
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پرونده های موقت برای بسیاری از عملیات ضروری است. ماژول TempFile روشهای مطمئن برای رسیدگی به آنها را فراهم می کند:

import tempfile
import shutil

with tempfile.TemporaryDirectory() as temp_dir:
    temp_path = Path(temp_dir) / 'temp_file.txt'
    temp_path.write_text('Temporary data')
    # Process data
    # Directory and contents automatically cleaned up

with tempfile.NamedTemporaryFile(delete=False) as temp_file:
    temp_file.write(b'Binary data')
    temp_path = temp_file.name

# Manual cleanup when needed
Path(temp_path).unlink()
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ماژول Shutil عملیات سطح بالایی را برای مدیریت پرونده ارائه می دهد:

import shutil

# Copy operations
shutil.copy2('source.txt', 'destination.txt')
shutil.copytree('source_dir', 'backup_dir')

# Move operations
shutil.move('old_location.txt', 'new_location.txt')

# Remove directory tree
shutil.rmtree('temp_directory')

# Disk usage
total, used, free = shutil.disk_usage('/')
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

FSSPEC یک رابط یکپارچه برای انواع مختلف سیستم فایل فراهم می کند:

import fsspec

# Local filesystem
with fsspec.open('file://path/to/local/file.txt', 'w') as f:
    f.write('Local file content')

# S3 storage
with fsspec.open('s3://bucket/file.txt', 'rb') as f:
    content = f.read()

# HTTP filesystem
with fsspec.open('https://example.com/data.json') as f:
    data = f.read()
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

Pyfilesystem عملیات سیستم فایل انتزاعی را ارائه می دهد:

from fs import open_fs

# Create filesystem objects
local_fs = open_fs('.')
memory_fs = open_fs('mem://')

# Copy between filesystems
fs.copy.copy_file(
    local_fs, 'source.txt',
    memory_fs, 'destination.txt'
)

# List directory contents
for path in local_fs.walk.files():
    print(path)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در اینجا یک مثال عملی با ترکیب چندین تکنیک برای یک سیستم همگام سازی فایل آورده شده است:

from pathlib import Path
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import shutil
import time
import hashlib

class SyncHandler(FileSystemEventHandler):
    def __init__(self, source_dir, backup_dir):
        self.source_dir = Path(source_dir)
        self.backup_dir = Path(backup_dir)

    def get_file_hash(self, path):
        with open(path, 'rb') as f:
            return hashlib.md5(f.read()).hexdigest()

    def sync_file(self, src_path):
        rel_path = Path(src_path).relative_to(self.source_dir)
        dest_path = self.backup_dir / rel_path

        if not dest_path.parent.exists():
            dest_path.parent.mkdir(parents=True)

        if not dest_path.exists() or \
           self.get_file_hash(src_path) != self.get_file_hash(dest_path):
            shutil.copy2(src_path, dest_path)
            print(f"Synced: {rel_path}")

    def on_modified(self, event):
        if not event.is_directory:
            self.sync_file(event.src_path)

def start_sync(source_dir, backup_dir):
    handler = SyncHandler(source_dir, backup_dir)
    observer = Observer()
    observer.schedule(handler, source_dir, recursive=True)
    observer.start()

    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

رسیدگی به خطا در عملیات پرونده بسیار مهم است. در اینجا یک رویکرد قوی وجود دارد:

from contextlib import contextmanager
import os
import errno

@contextmanager
def safe_file_operation(path):
    temp_path = path + '.tmp'
    try:
        yield temp_path
        # Atomic operation on most systems
        os.replace(temp_path, path)
    except Exception as e:
        if os.path.exists(temp_path):
            os.unlink(temp_path)
        if isinstance(e, OSError) and e.errno == errno.ENOSPC:
            raise RuntimeError("No space left on device")
        raise

def write_data_safely(path, data):
    with safe_file_operation(path) as temp_path:
        with open(temp_path, 'w') as f:
            f.write(data)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سازگاری متقاطع نیاز به بررسی دقیق دارد:

import os
import platform

def get_app_data_dir():
    system = platform.system().lower()
    if system == 'windows':
        base_dir = os.environ.get('APPDATA')
    elif system == 'darwin':
        base_dir = os.path.expanduser('~/Library/Application Support')
    else:
        base_dir = os.path.expanduser('~/.local/share')

    app_dir = os.path.join(base_dir, 'myapp')
    os.makedirs(app_dir, exist_ok=True)
    return app_dir
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این تکنیک ها پایه و اساس عملکرد سیستم فایل قوی در پایتون را تشکیل می دهند. نکته اصلی انتخاب ابزار مناسب برای هر مورد استفاده خاص ضمن حفظ قابلیت اطمینان و عملکرد کد است.

به یاد داشته باشید که خطاها را به طرز فجیعی برطرف کنید ، در صورت لزوم از عملیات اتمی اطمینان حاصل کنید و الزامات خاص پلتفرم را در نظر بگیرید. آزمایش منظم در سیستم عامل های مختلف به حفظ سازگاری و قابلیت اطمینان کمک می کند.

از طریق اجرای دقیق این تکنیک ها ، می توانید سیستم های قدرتمند مدیریت فایل را ایجاد کنید که هم کارآمد باشند و هم قابل حفظ هستند.


101 کتاب

101 کتاب یک شرکت انتشارات AI محور است که توسط نویسنده تأسیس شده است آراو جوشیبشر با استفاده از فناوری پیشرفته هوش مصنوعی ، ما هزینه های انتشار خود را فوق العاده کم نگه می داریم – برخی از کتاب ها به اندازه کم قیمت هستند 4 دلار– ایجاد دانش با کیفیت در دسترس همه.

کتاب ما را بررسی کنید کد تمیز Golang در آمازون موجود است.

برای به روزرسانی ها و اخبار هیجان انگیز با ما در ارتباط باشید. هنگام خرید کتاب ، جستجو کنید آراو جوشی برای یافتن بیشتر عناوین ما. برای لذت بردن از لینک ارائه شده استفاده کنید تخفیف های خاص!

خلاقیت های ما

حتما خلاقیت های ما را بررسی کنید:

سرمایه گذار مرکزی | سرمایه گذار اسپانیایی مرکزی | سرمایه گذار آلمانی مرکزی | زندگی هوشمند | دوره ها و پژواک | اسرار گیج کننده | هندوتوا | نخبه | مدارس JS


ما در متوسط ​​هستیم

بینش های فنی Koala | Epochs & Echoes World | سرمایه گذار رسانه مرکزی | رمز و رازهای گیج کننده متوسط | علوم و دوره های متوسط | هندوتوا مدرن

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا