در این مقاله، خواهیم دید که چگونه می‌توانیم گزارش‌های استفاده از دیسک را تولید کنیم و با استفاده از روش‌های متعدد، آنها را در یک فایل CSV با استفاده از پایتون ذخیره کنیم.

ماژول های مورد نیاز

ما در اینجا از 4 روش استفاده خواهیم کرد، ماژول های مورد نیاز Shutil، pandas، WMI، OS و subprocess هستند.

  • WMI – WMI مجموعه ای از مشخصات مایکروسافت برای ادغام مدیریت دستگاه ها و برنامه های کاربردی در یک شبکه از سیستم های محاسباتی ویندوز است. WMI داده هایی را در مورد وضعیت سیستم های کامپیوتر بومی یا راه دور به کاربران ارائه می دهد.
  • ما از shutil و WMI در روش‌های مختلف استفاده خواهیم کرد، اما پانداها در هر دوی آنها رایج هستند، بنابراین برای نصب پاندا، دستور زیر را در ترمینال VScode/ ترمینال Pycharm یا Command Prompt معمولی بنویسید.
pip install pandas

استفاده از ماژول WMI برای ایجاد گزارش استفاده از دیسک در فایل CSV

با استفاده از ماژول WMI می توانیم به راحتی نام دیسک، اندازه کلی آن دیسک و مقدار فضای خالی آن (هر دو بر حسب بایت) را دریافت کنیم. ماژول WMI را با استفاده از دستور زیر نصب کنید:

pip install WMI

در اینجا متغیری به نام key (کاربر می تواند از هر نامی استفاده کند) را برای مقداردهی اولیه روش WMI ماژول WMI می گیریم که با استفاده از آن گزارش استفاده را دریافت می کنیم، سپس 3 خط بعدی فقط 3 لیست خالی برای ذخیره نام درایو، free_space و total_size هستند. آن درایو

import wmi
import pandas as pd
 
key = wmi.WMI()
drive_name = []
free_space = []
total_size = []
 
for drive in key.Win32_LogicalDisk():
    drive_name.append(drive.Caption)
    free_space.append(round(int(drive.FreeSpace)/1e+9, 2))
    total_size.append(round(int(drive.Size)/1e+9, 2))
    print("================")
    print("Drive Name :", drive.Caption+"\n================",
          "\nFree Space Available in GB : \n", round(
              int(drive.FreeSpace)/1e+9, 2),
          "\nTotal Size in GB :\n", round(int(drive.Size)/1e+9, 2))
 
size_dict = {'Directory Name': drive_name,
             'Free Space (in GB)': free_space,
             'Total Size (in GB)': total_size}
 
data_frame = pd.DataFrame(size_dict)
data_frame.to_csv("disk_usage.csv")

در اینجا ما از یک درایو تکرارپذیر استفاده می‌کنیم و با استفاده از متغیر کلیدی که آن را روش Win32_LogicalDisk() می‌نامیم (کلاس Win32_LogicalDisk WMI یک منبع داده را نشان می‌دهد که به یک دستگاه ذخیره‌سازی محلی واقعی در یک سیستم رایانه‌ای که دارای ویندوز است، تبدیل می‌شود).

  • drive.Caption – نام درایو را نشان می دهد.
  • drive.FreeSpace – کل فضای آزاد موجود در آن درایو را بر حسب بایت نشان می دهد (به همین دلیل است که با تقسیم آن بر 1e+9 و گرد کردن آن به 2 رقم اعشار به گیگابایت تبدیل می شود).
  • drive.Size - اندازه کل آن درایو را بر حسب بایت نشان می دهد ((به همین دلیل است که با تقسیم آن بر 1e+9 و گرد کردن آن به 2 رقم اعشار به گیگابایت تبدیل می شود). تصویری برای کارکرد ماژول

اسکرین شات فایل CSV جدید ایجاد شده: اسکرین شات فایل csv ایجاد شده

استفاده از ماژول Shutil برای ایجاد گزارش استفاده از دیسک در فایل CSV

با استفاده از ماژول Shutil به راحتی می توانیم اندازه کل، فضای استفاده شده و فضای خالی هر مسیری که به عنوان آرگومان برای آن ارائه شده است را بدست آوریم. ماژول Shutil را با استفاده از دستور زیر نصب کنید.

pip install pytest-shutil
import shutil
import pandas as pd
 
# Path
drive_name = "C:\\"
 
# Get the disk usage statistics
# about the given path
stats = shutil.disk_usage(drive_name)
 
total_size = round(stats[0]/1e+9, 2)
free_space = round(stats[2]/1e+9, 2)
used_space = round(stats[1]/1e+9, 2)
 
values = [drive_name, total_size, free_space, used_space]
index = ['Drive Name',
         'Total Size (in GB)', 'Free Space (in GB)',
         'Used Space (in GB)']
 
data_frame = pd.DataFrame(list(zip(index, values)),
                          columns=['Information', 'Report'])
data_frame.to_csv("disk_usage.csv")
 
# Print disk usage statistics
print("Disk usage statistics:")
print("Total Size : ", total_size,
      "Free Space Available : ", free_space,
      "Used_Space : ", used_space)

خروجی عکس خروجی این روش

در اینجا، ابتدا drive_name را ذخیره می کنیم، سپس آن را به عنوان آرگومان متد disk_usage() ماژول Shutil ارسال می کنیم، اکنون با استفاده از 3 متغیر total_size، free_space و used_space را ذخیره می کنیم، متد disk.usage() خروجی را به صورت یک تاپل برمی گرداند. و از آن تاپل با استفاده از مقادیر شاخص، مقادیر مورد نیاز را واکشی می کنیم و آنها را از بایت به گیگابایت تبدیل می کنیم و آنها را به 2 رقم اعشار گرد می کنیم. سپس با استفاده از تابع zip و دو لیست، آنها را به یک DataFrame تبدیل کرده و در یک فایل CSV ذخیره می کنیم، همچنین مقادیر را در ترمینال چاپ می کنیم. فایل CSV جدید ایجاد شده و محتویات آن در زیر نشان داده شده است: تصویری از فایل جدید csv در این روش

در اینجا اندازه ها به گیگابایت است، اگر کاربر بخواهد می تواند آن را به مگابایت یا هر چیز دیگری تغییر دهد.

استفاده از ماژول سیستم عامل برای ایجاد گزارش استفاده از دیسک در فایل CSV

با استفاده از ماژول سیستم عامل می توانیم اندازه دایرکتوری را نیز دریابیم.

import os
import pandas as pd
 
 
def get_size(start_path):
    total_size = 0
    for d_path, d_names, f_name in os.walk(start_path):
        for f in f_name:
            fp = os.path.join(d_path, f)
            # skip if found as symbolic link
            if not os.path.islink(fp):
                total_size += os.path.getsize(fp)
 
    return total_size/1e+9
 
 
sizes = []
paths = []
 
# The value of range would be the
# number of drive present in user's device
for i in range(2):
    path = input("Please enter the Path : ")
    paths.append(path)
    # Drive paths must have a colon
    # and forward slash after their name
    sizes.append(get_size(path+":\\"))
 
df = pd.DataFrame({
    "Drive Name": paths,
    "Size of Drive in GB": sizes},
    # User can give any thing as the index,
    # but the amount of them should be same
    # as the number of drives passed
    index=[1, 2])
 
df.to_csv("disk_usage_os.csv")
 
print(df)

خروجی خروجی روش

داده های موجود در فایل CSV مانند شکل زیر خواهد بود: داده های درون فایل csv به این شکل است

در این مقاله به صورت کامل و با چند روش مختلف سعی کردیم یک برنامه ای را پیاده سازی کنیم که در آن برنامه خروجی هایی با فرمت CSV و برای داده های استفاده از دیسک و مقدار استفاده از دیسک و ... را به ما نشان می دهد.