كشخص قضى أكثر من عقد في عالم البرمجة، تعلمت أن تأتيمة المهام المتكررة يمكن أن توفر كمية كبيرة من الوقت والجهد.
الـبايثون، مع بنية بسيطة ومكتبات قوية، هي واحدة من أفضل لغات البرمجة لإنشاء سكربتات الأتمتة. سواء كنت مبرمجًا أو شخصًا يبحث عن تسهيل المهام اليومية، لـبايثون أدوات يمكن أن تساعدك.
في هذا المقال، سأشارك 21 سكربتًا بلغة الـبايثون قمت باستخدامها لأتمتة مهام مختلفة. هذه السكربتات مثالية لأي شخص يرغب في توفير الوقت وتحسين الكفاءة في روتين عمله.
1. إعادة تسمية الملفات بالجملة
إعادة تسمية الملفات واحدًا تلو الآخر يمكن أن يكون مهمة تستغرق الكثير من الوقت، ولكن مع بايثون، يمكنك بسهولة أتمتة هذا باستخدام وحدة os.
إليك سكربت بسيط يقوم بـإعادة تسمية ملفات متعددة في مجلد استنادًا إلى نمط معين:
import os def bulk_rename(folder_path, old_name_part, new_name_part): for filename in os.listdir(folder_path): if old_name_part in filename: new_filename = filename.replace(old_name_part, new_name_part) os.rename(os.path.join(folder_path, filename), os.path.join(folder_path, new_filename)) print(f"Renamed {filename} to {new_filename}") folder = '/path/to/your/folder
' bulk_rename(folder, 'old_part
', 'new_part
')
يبحث هذا السكربت عن الملفات التي تحتوي على جزء_الاسم_القديم
في أسمائها ويستبدله بـجزء_الاسم_الجديد
.
2. نسخ النسخ الاحتياطية تلقائيًا
نعلم جميعًا مدى أهمية عمل نسخ احتياطية بانتظام، ويمكن أن يتم ذلك بسهولة باستخدام وحدةshutil
في بايثون.
سيقوم هذا السكربت بنسخ جميع الملفات من دليل واحد إلى آخر لأغراض النسخ الاحتياطي:
import shutil import os def backup_files(src_dir, dest_dir): if not os.path.exists(dest_dir): os.makedirs(dest_dir) for file in os.listdir(src_dir): full_file_name = os.path.join(src_dir, file) if os.path.isfile(full_file_name): shutil.copy(full_file_name, dest_dir) print(f"Backed up {file} to {dest_dir}") source = '/path/to/source/directory
' destination = '/path/to/destination/directory
' backup_files(source, destination)
يمكنك جدولة هذا البرنامج النصي ليعمل يوميًا باستخدام أدوات جدولة المهام مثل كرون (لينكس) أو جدولة المهام (ويندوز).
3. تنزيل الملفات من الإنترنت
إذا كنت تقوم بانتظام بتنزيل الملفات من الإنترنت، يمكنك أتمتة هذه المهمة باستخدام مكتبة aiohttp
.
إليك برنامج نصي بسيط لتنزيل الملفات من عناوين URL:
import aiohttp import asyncio import aiofiles async def download_file(url, filename): async with aiohttp.ClientSession() as session: async with session.get(url) as response: async with aiofiles.open(filename, 'wb') as file: await file.write(await response.read()) print(f"Downloaded {filename}") urls = { 'https://example.com/file1.zip': 'file1.zip', 'https://example.com/file2.zip': 'file2.zip' } async def download_all(): tasks = [download_file(url, filename) for url, filename in urls.items()] await asyncio.gather(*tasks) asyncio.run(download_all())
يقوم هذا البرنامج النصي بتنزيل الملف من عنوان URL المحدد وحفظه في المجلد الذي تحدده.
4. أتمتة تقارير البريد الإلكتروني
إذا كنت بحاجة لإرسال تقارير البريد الإلكتروني بانتظام، يمكنك أتمتتها باستخدام مكتبة smtplib
، التي تسمح لك بإرسال رسائل البريد الإلكتروني من حساب Gmail بسهولة:
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart def send_email(subject, body, to_email): sender_email = '[email protected]' sender_password = 'yourpassword' receiver_email = to_email msg = MIMEMultipart() msg['From'] = sender_email msg['To'] = receiver_email msg['Subject'] = subject msg.attach(MIMEText(body, 'plain')) try: server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(sender_email, sender_password) server.sendmail(sender_email, receiver_email, msg.as_string()) server.quit() print("Email sent successfully!") except Exception as e: print(f"Failed to send email: {e}") subject = 'Monthly Report' body = 'Here is the monthly report.' send_email(subject, body, '[email protected]')
سيقوم هذا البرنامج النصي بإرسال بريد إلكتروني بسيط يحتوي على موضوع وجسم إلى مستلم محدد. تأكد من تمكين التطبيقات الأقل أمانًا في Gmail إذا كنت تستخدم هذه الطريقة.
5. جدولة المهام (أتمتة المهام)
يمكن جدولة المهام بسهولة باستخدام مكتبة schedule
، التي تسمح لك بأتمتة المهام مثل إرسال بريد إلكتروني أو تشغيل برنامج نسخ احتياطي في أوقات محددة:
import schedule import time def job(): print("Running scheduled task!") # Schedule the task to run every day at 10:00 AM schedule.every().day.at("10:00").do(job) while True: schedule.run_pending() time.sleep(1)
سيستمر هذا البرنامج النصي في العمل ويشغل المهام في الوقت المحدد، في هذه الحالة، الساعة 10:00 صباحًا كل يوم.
6. جمع البيانات من خلال استخراج الويب
استخدام aiohttp
لطلبات HTTP غير المتزامنة بدلاً من مكتبة الطلبات الزمنية requests
يمكن أن يجعل عملية جمع المعلومات من الويب أكثر كفاءة.
هذا المثال يسترد صفحات متعددة بشكل متوازي.
import aiohttp import asyncio from bs4 import BeautifulSoup async def fetch(session, url): async with session.get(url) as response: return await response.text() async def scrape(urls): async with aiohttp.ClientSession() as session: tasks = [fetch(session, url) for url in urls] html_pages = await asyncio.gather(*tasks) for html in html_pages: soup = BeautifulSoup(html, 'html.parser') print(soup.title.string) urls = ['https://example.com/page1
', 'https://example.com/page2
'] asyncio.run(scrape(urls))
7. تلقائي صفحات التواصل الاجتماعي
إذا كنت تدير حسابات وسائل التواصل الاجتماعي، يمكنك أتمتة النشر عن طريق استخدام مكتبات مثل Tweepy
(لتويتر) و Instagram-API
(لإنستغرام) التي تسمح لك بالنشر تلقائيًا.
فيما يلي مثال على استخدام مكتبة Tweepy
لنشر تغريدة:
import tweepy def tweet(message): consumer_key = 'your_consumer_key' consumer_secret = 'your_consumer_secret' access_token = 'your_access_token' access_token_secret = 'your_access_token_secret' auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth) api.update_status(message) print("Tweet sent successfully!") tweet("Hello, world!")
يقوم هذا النص بنشر تغريدة برسالة “Hello, world!” إلى حساب تويتر الخاص بك.
8. توليد الفواتير تلقائيًا
إذا كنت تولّد فواتير بانتظام، يمكنك أتمتتها باستخدام مكتبات مثل Fpdf
، التي ستنشئ فواتير PDF:
from fpdf import FPDF def create_invoice(client_name, amount): pdf = FPDF() pdf.add_page() pdf.set_font("Arial", size=12) pdf.cell(200, 10, txt="Invoice", ln=True, align='C') pdf.cell(200, 10, txt=f"Client: {client_name}", ln=True, align='L') pdf.cell(200, 10, txt=f"Amount: ${amount}", ln=True, align='L') pdf.output(f"{client_name}_invoice.pdf") print(f"Invoice for {client_name} created successfully!") create_invoice('John Doe', 500)
يقوم هذا النص بإنشاء فاتورة بسيطة وحفظها كملف PDF.
9. رصد توفر المواقع على الإنترنت
يمكن استخدام Python لأتمتة مراقبة توفر المواقع على الإنترنت باستخدام مكتبة requests
، التي يمكن أن تفحص بانتظام ما إذا كانت موقعًا على الإنترنت أو لا:
import requests
import time
def check_website(url):
try:
response = requests.get(url)
if response.status_code == 200:
print(f"Website {url} is up!")
else:
print(f"Website {url} returned a status code {response.status_code}")
except requests.exceptions.RequestException as e:
print(f"Error checking website {url}: {e}")
url = 'https://example.com
' while True: check_website(url) time.sleep(3600) # Check every hour
يقوم هذا النص بالتحقق مما إذا كان الموقع على الإنترنت ويطبع رمز الحالة.
10. الرد التلقائي على رسائل البريد الإلكتروني
إذا كنت تتلقى رسائل بريد إلكتروني بانتظام وترغب في إعداد رد تلقائي، استخدم مكتبات imaplib
و smtplib
للرد التلقائي على الرسائل البريدية:
import imaplib import smtplib from email.mime.text import MIMEText def auto_reply(): # Connect to email server mail = imaplib.IMAP4_SSL("imap.gmail.com") mail.login('[email protected]', 'yourpassword') mail.select('inbox') # Search for unread emails status, emails = mail.search(None, 'UNSEEN') if status == "OK": for email_id in emails[0].split(): status, email_data = mail.fetch(email_id, '(RFC822)') email_msg = email_data[0][1].decode('utf-8') # Send auto-reply send_email("Auto-reply", "Thank you for your email. I'll get back to you soon.", '[email protected]') def send_email(subject, body, to_email): sender_email = '[email protected]' sender_password = 'yourpassword' receiver_email = to_email msg = MIMEText(body) msg['From'] = sender_email msg['To'] = receiver_email msg['Subject'] = subject with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server: server.login(sender_email, sender_password) server.sendmail(sender_email, receiver_email, msg.as_string()) auto_reply()
يقوم هذا النص بالرد التلقائي على رسائل البريد الإلكتروني غير المقروءة برسالة محددة مسبقًا.
11. تنظيف الملفات
توفر لغة Python طريقة فعالة لتلقائيَّة تنظيف الملفات، وخاصةً لحذف أو نقل الملفات القديمة للحفاظ على تنظيم الدلائل.
أدناه سكربت بسيط يقوم بحذف الملفات الأقدم من عدد محدد من الأيام باستخدام وحدات os
و time
.
import aiofiles import os import asyncio import time async def clean_up(folder_path, days_old): now = time.time() cutoff_time = now - (days_old * 86400) for filename in os.listdir(folder_path): file_path = os.path.join(folder_path, filename) if os.path.getmtime(file_path) < cutoff_time: await aiofiles.os.remove(file_path) print(f"Deleted {filename}") folder = '/path/to/your/folder' asyncio.run(clean_up(folder, 30))
12. إنشاء كلمات مرور تلقائيًّا
إنشاء كلمات مرور قوية وفريدة أمر أساسي للأمان، ويمكن للغة Python المساعدة في أتمتة هذه العملية باستخدام وحدة random
.
أدناه سكربت بسيط يقوم بإنشاء كلمات مرور عشوائية بطول محدد، يدمج بين الحروف والأرقام والرموز الخاصة لتعزيز الأمان.
import random import asyncio import string async def generate_password(length=12): characters = string.ascii_letters + string.digits + string.punctuation password = ''.join(random.choice(characters) for _ in range(length)) return password async def generate_multiple_passwords(n, length=12): tasks = [generate_password(length) for _ in range(n)] passwords = await asyncio.gather(*tasks) print(passwords) asyncio.run(generate_multiple_passwords(5))
13. تتبع المهام/تذكير
يمكن إنشاء نظام تتبع المهام أو التذكير في لغة Python باستخدام وحدات datetime
و asyncio
.
import asyncio from datetime import datetime async def task_reminder(task_name, interval): while True: print(f"Reminder: {task_name} - {datetime.now()}") await asyncio.sleep(interval) async def main(): await asyncio.gather( task_reminder("Drink Water", 7200), # Remind every 2 hours task_reminder("Take a Break", 3600) # Remind every 1 hour ) asyncio.run(main())
يقوم هذا السكربت بإرسال تذكير حول المهمة في الوقت المحدد.
14. توليد تقارير يومية تلقائيًّا
أتمتة تقارير يومية باستخدام لغة Python لجمع البيانات وتنسيقها في تقرير:
import datetime import aiofiles import asyncio async def generate_report(data): today = datetime.date.today() filename = f"daily_report_{today}.txt" async with aiofiles.open(filename, 'w') as file: await file.write(f"Report for {today}\n") await file.write("\n".join(data)) print(f"Report generated: {filename}") data = ["Task 1: Completed", "Task 2: Pending", "Task 3: Completed"] asyncio.run(generate_report(data))
15. مراقبة موارد النظام
إذا كنت مسؤول نظام، يمكنك استخدام لغة Python لمراقبة موارد النظام مثل استخدام وحدة المعالجة المركزية والذاكرة، بمساعدة مكتبة psutil
.
import psutil def monitor_resources(): cpu_usage = psutil.cpu_percent(interval=1) memory_usage = psutil.virtual_memory().percent print(f"CPU Usage: {cpu_usage}%") print(f"Memory Usage: {memory_usage}%") monitor_resources()
16. تغيير حجم الصور بالدُفعة
إذا كنت بحاجة إلى تغيير حجم الصور بالجملة، فإن Python يجعل الأمر سهلاً باستخدام مكتبة Pillow
.
from PIL import Image import os import asyncio from concurrent.futures import ProcessPoolExecutor def resize_image(filename, width, height): img = Image.open(filename) img = img.resize((width, height)) img.save(f"resized_{filename}") return f"Resized {filename}" async def resize_images(folder_path, width, height): with ProcessPoolExecutor() as executor: loop = asyncio.get_event_loop() tasks = [] for filename in os.listdir(folder_path): if filename.endswith('.jpg'): tasks.append(loop.run_in_executor( executor, resize_image, os.path.join(folder_path, filename), width, height)) results = await asyncio.gather(*tasks) print(results) folder = '/path/to/your/images' asyncio.run(resize_images(folder, 800, 600))
يقوم هذا النص بتغيير حجم جميع الصور .jpg
في مجلد إلى الأبعاد المحددة.
١٧. أتمتة نسخ البيانات إلى السحابة
يمكن تحقيق أتمتة عمليات النسخ الاحتياطي إلى خدمات السحابة مثل Google Drive بواسطة Python باستخدام مكتبات مثل pydrive
.
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
def backup_to_google_drive(file_path):
gauth = GoogleAuth()
gauth.LocalWebserverAuth()
drive = GoogleDrive(gauth)
file = drive.CreateFile({'title': 'backup_file.txt'})
file.Upload()
print("Backup uploaded successfully!")
file = '/path/to/your/file.txt
' backup_to_google_drive(file)
١٨. إنشاء تذكيرات يومية
يسهل إعداد التذكيرات اليومية باستخدام وحدة time
التي ستذكرك بشرب الماء كل ساعتين:
import time def water_reminder(): while True: print("Time to drink water!") time.sleep(7200) # Remind every 2 hours water_reminder()
١٩. أتمتة إدخال البيانات إلى Excel
إذا كنت تدخل البيانات بانتظام إلى Excel، فإن Python يمكن أن يساعد في أتمتة هذه المهمة باستخدام مكتبة openpyxl
:
from openpyxl import Workbook def create_excel(data): wb = Workbook() ws = wb.active for row in data: ws.append(row) wb.save('data.xlsx') print("Excel file created successfully!") data = [ ["Name", "Age", "City"], ["John", 30, "New York"], ["Anna", 25, "London"], ] create_excel(data)
٢٠. أتمتة تنظيف البيانات
إذا كنت تعمل مع مجموعات بيانات كبيرة، يمكن لـ Python أن يقوم بمهام تنظيف البيانات تلقائيًا، والتي ستزيل الصفوف الفارغة من ملف CSV:
import csv
def clean_csv(file_path):
with open(file_path, 'r') as infile:
reader = csv.reader(infile)
rows = [row for row in reader if any(row)]
with open(file_path, 'w', newline='') as outfile:
writer = csv.writer(outfile)
writer.writerows(rows)
print("Empty rows removed from CSV")
file = '/path/to/your/data.csv
' clean_csv(file)
٢١. استخراج النص من الصور
يمكن استخدام Python لـ استخراج النص من الصور باستخدام مكتبة pytesseract
، والتي يمكن أن تكون مفيدة عندما تحتاج إلى ترقيم المحتوى المطبوع أو استخراج النص من الوثائق الممسوحة ضوئيًا.
from PIL import Image import pytesseract def extract_text_from_image(image_path): # Open the image file img = Image.open(image_path) # Use pytesseract to extract text text = pytesseract.image_to_string(img) return text image_path = 'path_to_your_image.jpg' extracted_text = extract_text_from_image(image_path) print("Extracted Text:\n", extracted_text)
الاستنتاج
هذه أمثلة قليلة فقط على ما يمكن أن يفعله Python لأتمتة مهامك اليومية. بفضل بنية اللغة البسيطة والمكتبات القوية، يمكن لـ Python التعامل مع معظم المهام التي تواجهك.
سواء كنت تدير الملفات أو ترسل البريد الإلكتروني أو توليد التقارير، يمكن للبايثون أن يوفر لك الوقت ويعزز من إنتاجيتك. لذا، ابدأ اليوم في العمل بالأتمتة باستخدام البايثون، ودعه يتولى مهامك اليومية!