ವಿಷಯಕ್ಕೆ ತೆರಳಿ

ಪ್ರಾಜೆಕ್ಟ್ 8: ಫೈಲ್ ಆರ್ಗನೈಸರ್ (File Organizer)

ಈ ಪ್ರಾಜೆಕ್ಟ್‌ನಲ್ಲಿ, ನಾವು ಒಂದು ಪೈಥಾನ್ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ನಿರ್ಮಿಸುತ್ತೇವೆ. ಅದು ಒಂದು ನಿರ್ದಿಷ್ಟ ಫೋಲ್ಡರ್‌ನಲ್ಲಿರುವ (ಉದಾಹರಣೆಗೆ, ನಿಮ್ಮ "Downloads" ಫೋಲ್ಡರ್) ಫೈಲ್‌ಗಳನ್ನು ಅವುಗಳ ಫೈಲ್ ಪ್ರಕಾರಕ್ಕೆ (extension) ಅನುಗುಣವಾಗಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬೇರೆ ಬೇರೆ ಸಬ್‌ಫೋಲ್ಡರ್‌ಗಳಿಗೆ (ಉದಾ: Images, Documents, Videos) ಸರಿಸುತ್ತದೆ.

ಎಚ್ಚರಿಕೆ: ಈ ಸ್ಕ್ರಿಪ್ಟ್ ಫೈಲ್‌ಗಳನ್ನು ಸರಿಸುತ್ತದೆ. ಆದ್ದರಿಂದ, ಮೊದಲು ಒಂದು ಟೆಸ್ಟ್ ಫೋಲ್ಡರ್ ರಚಿಸಿ, ಅದರಲ್ಲಿ ಕೆಲವು ನಕಲಿ ಫೈಲ್‌ಗಳನ್ನು ಹಾಕಿ, ಅದರ ಮೇಲೆ ಈ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಪರೀಕ್ಷಿಸಿ.

ಕಲಿಕೆಯ ಪರಿಕಲ್ಪನೆಗಳು

  • os ಮತ್ತು shutil ಮಾಡ್ಯೂಲ್‌ಗಳು (ಫೈಲ್ ಸಿಸ್ಟಮ್ ಕಾರ್ಯಾಚರಣೆಗಳಿಗಾಗಿ).
  • pathlib ಮಾಡ್ಯೂಲ್ (ಆಧುನಿಕ ಫೈಲ್ ಪಾತ್ ನಿರ್ವಹಣೆಗಾಗಿ).
  • ಫೋಲ್ಡರ್‌ನಲ್ಲಿರುವ ಫೈಲ್‌ಗಳ ಮೂಲಕ ಇಟರೇಟ್ ಮಾಡುವುದು.
  • ಡಿಕ್ಷನರಿಗಳನ್ನು ಬಳಸಿ ಫೈಲ್ ಪ್ರಕಾರಗಳನ್ನು ವರ್ಗೀಕರಿಸುವುದು.
  • ಫೋಲ್ಡರ್‌ಗಳನ್ನು ರಚಿಸುವುದು ಮತ್ತು ಫೈಲ್‌ಗಳನ್ನು ಸರಿಸುವುದು.

ಕೋಡ್

import os
from pathlib import Path
import shutil

def organize_folder(folder_path):
    """ಒಂದು ಫೋಲ್ಡರ್‌ನಲ್ಲಿರುವ ಫೈಲ್‌ಗಳನ್ನು ಅವುಗಳ ಪ್ರಕಾರಕ್ಕೆ ಅನುಗುಣವಾಗಿ ಸಂಘಟಿಸುತ್ತದೆ."""

    # ಫೈಲ್ ಪ್ರಕಾರಗಳು ಮತ್ತು ಅವುಗಳ ಗಮ್ಯಸ್ಥಾನ ಫೋಲ್ಡರ್‌ಗಳನ್ನು ಡಿಫೈನ್ ಮಾಡುವುದು
    FILE_TYPES = {
        "Images": ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg'],
        "Documents": ['.pdf', '.doc', '.docx', '.txt', '.xls', '.xlsx', '.ppt', '.pptx'],
        "Videos": ['.mp4', '.mov', '.avi', '.mkv'],
        "Audio": ['.mp3', '.wav', '.aac'],
        "Archives": ['.zip', '.rar', '.tar', '.gz'],
        "Scripts": ['.py', '.js', '.html', '.css']
    }

    target_folder = Path(folder_path)

    if not target_folder.is_dir():
        print(f"Error: '{folder_path}' ಎಂಬ ಫೋಲ್ಡರ್ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ.")
        return

    print(f"'{target_folder.name}' ಫೋಲ್ಡರ್ ಅನ್ನು ಸಂಘಟಿಸಲಾಗುತ್ತಿದೆ...")

    # ಫೋಲ್ಡರ್‌ನಲ್ಲಿರುವ ಪ್ರತಿಯೊಂದು ಐಟಂ ಅನ್ನು ಪರಿಶೀಲಿಸುವುದು
    for item in target_folder.iterdir():
        # ನಮಗೆ ಕೇವಲ ಫೈಲ್‌ಗಳು ಬೇಕು, ಫೋಲ್ಡರ್‌ಗಳಲ್ಲ
        if item.is_file():
            file_extension = item.suffix.lower()
            moved = False

            # ಫೈಲ್ ಪ್ರಕಾರವನ್ನು ಹುಡುಕುವುದು
            for folder_name, extensions in FILE_TYPES.items():
                if file_extension in extensions:
                    # ಗಮ್ಯಸ್ಥಾನ ಫೋಲ್ಡರ್ ರಚಿಸುವುದು (ಅದು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲದಿದ್ದರೆ)
                    dest_folder = target_folder / folder_name
                    dest_folder.mkdir(exist_ok=True)

                    # ಫೈಲ್ ಅನ್ನು ಹೊಸ ಫೋಲ್ಡರ್‌ಗೆ ಸರಿಸುವುದು
                    shutil.move(str(item), str(dest_folder))
                    print(f"ಸರಿಸಲಾಗಿದೆ: '{item.name}' -> '{folder_name}/'")
                    moved = True
                    break

            # ��ಾವುದೇ ವರ್ಗಕ್ಕೆ ಸೇರದ ಫೈಲ್‌ಗಳು
            if not moved:
                # 'Others' ಫೋಲ್ಡರ್ ರಚಿಸುವುದು
                others_folder = target_folder / "Others"
                others_folder.mkdir(exist_ok=True)
                shutil.move(str(item), str(others_folder))
                print(f"ಸರಿಸಲಾಗಿದೆ: '{item.name}' -> 'Others/'")

    print("ಸಂಘಟನೆ ಪೂರ್ಣಗೊಂಡಿದೆ!")

def main():
    """ಮುಖ್ಯ ಫಂಕ್ಷನ್."""
    folder_to_organize = input("ಸಂಘಟಿಸಬೇಕಾದ ಫೋಲ್ಡರ್‌ನ ಪೂರ್ಣ ಪಾತ್ ಅನ್ನು ನಮೂದಿಸಿ: ")
    organize_folder(folder_to_organize)

if __name__ == "__main__":
    main()

ವಿವರಣೆ

  1. import os, from pathlib import Path, import shutil:
    • pathlib: ಫೈಲ್ ಸಿಸ್ಟಮ್ ಪಾತ್‌ಗಳನ್ನು ಆಬ್ಜೆಕ್ಟ್‌ಗಳಾಗಿ ಪ್ರತಿನಿಧಿಸಲು ಒಂದು ಆಧುನಿಕ ಮತ್ತು ಸುಲಭವಾದ ಮಾರ್ಗವನ್ನು ಒದಗಿಸುತ್ತದೆ.
    • shutil: ಫೈಲ್‌ಗಳನ್ನು ��ರಿಸಲು (shutil.move) ನಂತಹ ಉನ್ನತ ಮಟ್ಟದ ಫೈಲ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.
  2. FILE_TYPES ಡಿಕ್ಷನರಿ: ಇದು ನಮ್ಮ ವರ್ಗೀಕರಣದ ನಿಯಮಗಳನ್ನು ಹೊಂದಿದೆ. ಕೀಗಳು ನಾವು ರಚಿಸಲಿರುವ ಫೋಲ್ಡರ್‌ಗಳ ಹೆಸರುಗಳು, ಮತ್ತು ವ್ಯಾಲ್ಯೂಗಳು ಆ ಫೋಲ್ಡರ್‌ಗೆ ಸೇರಬೇಕಾದ ಫೈಲ್ ಎಕ್ಸ್‌ಟೆನ್ಶನ್‌ಗಳ ಲಿಸ್ಟ್.
  3. Path(folder_path): ಬಳಕೆದಾರರು ನೀಡಿದ ಸ್ಟ್ರಿಂಗ್ ಪಾತ್ ಅನ್ನು Path ಆಬ್ಜೆಕ್ಟ್ ಆಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ.
  4. target_folder.iterdir(): ಇದು ಟಾರ್ಗೆಟ್ ಫೋಲ್ಡರ್‌ನಲ್ಲಿರುವ ಎಲ್ಲಾ ಫೈಲ್‌ಗಳು ಮತ್ತು ಸಬ್‌ಫೋಲ್ಡರ್‌ಗಳ ಮೇಲೆ ಇಟರೇಟ್ ಮಾಡಲು ಒಂದು ಇಟರೇಟರ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ.
  5. item.is_file(): ಪ್ರಸ್ತುತ ಐಟಂ ಒಂದು ಫೈಲ್ ಹೌದೇ ಎಂದು ಪರಿಶೀಲಿಸ��ತ್ತದೆ.
  6. item.suffix.lower(): ಫೈಲ್‌ನ ಎಕ್ಸ್‌ಟೆನ್ಶನ್ ಅನ್ನು (ಉದಾ: .PDF ನಿಂದ .pdf ಗೆ) ಪಡೆಯುತ್ತದೆ ಮತ್ತು ಅದನ್ನು ಲೋವರ್‌ಕೇಸ್‌ಗೆ ಪರಿವರ್ತಿಸುತ್ತದೆ.
  7. dest_folder.mkdir(exist_ok=True): ಗಮ್ಯಸ್ಥಾನ ಫೋಲ್ಡರ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ. exist_ok=True ಪ್ಯಾರಾಮೀಟರ್, ಫೋಲ್ಡರ್ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದ್ದರೆ ಎರರ್ ಬರುವುದನ್ನು ತಡೆಯುತ್ತದೆ.
  8. shutil.move(source, destination): ಫೈಲ್ ಅನ್ನು ಒಂದು ಸ್ಥಳದಿಂದ ಇನ್ನೊಂದು ಸ್ಥಳಕ್ಕೆ ಸರಿಸುತ್ತದೆ.
  9. Others ಫೋಲ್ಡರ್: FILE_TYPES ಡಿಕ್ಷನರಿಯಲ್ಲಿ ಡಿಫೈನ್ ಮಾಡದ ಯಾವುದೇ ಫೈಲ್ ಪ್ರಕಾರಗಳು ಸಿಕ್ಕರೆ, ಅವುಗಳನ್ನು "Others" ಎಂಬ ಫೋಲ್ಡರ್‌ಗೆ ಸರಿಸಲಾಗುತ್ತದೆ.