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