סקריפטים של פייתון למחיקת תקנון הקבצים

ניקוי מערכת קבצים באופן קבוע באופן ידני אינו טוב. אוטומט אותם!


מחיקת קבצים ותיקיות ידנית אינה משימה מרגשת, כפי שאפשר לחשוב. הגיוני להפוך אותם לאוטומטיים.

הנה בא פיתון כדי להקל על חיינו. פייתון היא שפת תכנות מצוינת לתסריטים. אנו הולכים לנצל את פייתון כדי לסיים את המשימה שלנו ללא שום מכשול. ראשית, עליכם לדעת מדוע פייתון היא בחירה טובה.

  • פייתון היא שפה מועדפת בכל הזמנים למשימות אוטומטיות
  • פחות קוד בהשוואה לשפות תכנות אחרות
  • Python תואם את כל מערכות ההפעלה. אתה יכול להריץ את אותו קוד ב- Windows, Linux ו- Mac.
  • לפייתון יש מודול בשם os שמסייע לנו לתקשר עם מערכת ההפעלה. אנו הולכים להשתמש במודול זה כדי להשלים את האוטומציה שלנו למחיקת הקבצים.

אנו יכולים להחליף כל משימות מערכת מעצבנות או חוזרות על עצמן באמצעות Python. כתיבת תסריטים להשלמת משימת מערכת ספציפית היא קאפקייק אם אתה מכיר את פייתון. בואו נסתכל על מקרה השימוש הבא.

הערה: להלן נבדקים ב- Python 3.6+

הסרת קבצים / תיקיות שגילם מעל X יום

לעתים קרובות אינך זקוק ליומנים ישנים, ואתה צריך לנקות אותם באופן קבוע כדי לאפשר אחסון זמין. זה יכול להיות כל דבר ולא רק יומני.

יש לנו שיטה שנקראת stat במודול os שמספק פרטים על הגישה האחרונה (st_atime), שינוי (st_mtime), ושינוי מטא נתונים (st_ctime) זמן. כל השיטות מחזירות זמן תוך שניות מאז התקופה. תוכל למצוא פרטים נוספים על התקופה כאן.

אנו נשתמש בשיטה שנקראת os.walk (נתיב) למעבר בין תיקיות המשנה של תיקיה.

עקוב אחר השלבים שלהלן לכתיבת קוד עבור קבצי המחיקה / תיקיות המחיקה על בסיס מספר הימים.

  • ייבא את המודולים זמן, os, shutil
  • הגדר את הנתיב והימים למשתנים
  • המר את מספר הימים לשניות באמצעות זמן זמן() שיטה
  • בדוק אם הנתיב קיים או לא באמצעות os.path.exists (נתיב) מודול
  • אם הנתיב קיים, קבל את רשימת הקבצים והתיקיות שנמצאים בנתיב, כולל תיקיות משנה. השתמש בשיטה os.walk (נתיב), וזה יחזיר גנרטור שמכיל תיקיות, קבצים ותיקיות משנה
  • השג את הנתיב של הקובץ או התיקיה על ידי חיבור לשביל הנוכחי וגם לשם הקובץ / תיקיה בשיטה os.path.join ()
  • להשיג את זמן מ ה os.stat (נתיב) שיטה באמצעות התכונה st_ctime
  • השווה את זמן עם הזמן שחישבנו קודם
  • אם התוצאה גדולה מהימים הרצויים של המשתמש, בדוק אם זה קובץ או תיקיה. אם זהו קובץ, השתמש בסמל os. remove (נתיב) השתמש אחרת ב- shutil.rmtree () שיטה
  • אם הנתיב אינו קיים, הדפס הודעה שלא נמצאה

בואו נראה את הקוד בפירוט.

# ייבוא ​​המודולים הנדרשים
יבוא os
יבוא
זמן יבוא

# פונקציה עיקרית
def ראשי ():

# אתחול הספירה
delete_folders_count = 0
delete_files_count = 0

# ציין את הנתיב
נתיב = "/ PATH_TO_DELETE"

# ציין את הימים
ימים = 30

# המרת ימים לשניות
# time.time () מחזירה את השעה הנוכחית בשניות
שניות = זמן.זמן () – (ימים * 24 * 60 * 60)

# בודק אם הקובץ נמצא בנתיב או לא
אם os.path.exists (נתיב):

# iterating על כל תיקיה וקובץ בנתיב
עבור root_folder, תיקיות, קבצים ב- os.walk (נתיב):

# השוואת הימים
אם שניות >= get_file_or_folder_age (root_folder):

# הסרת התיקיה
remove_folder (root_folder)
delete_folders_count + = 1 # מספר מצטבר

# שבירה לאחר הסרת תיקיית השורש
לשבור

אחר:

# בדיקת תיקיה מהתיקייה root
לתיקייה בתיקיות:

# נתיב תיקיה
folder_path = os.path.join (תיקיית root, תיקיה)

# השוואה עם הימים
אם שניות >= get_file_or_folder_age (folder_path):

# להפעיל את הפונקציה remove_folder
הסר תיקייה (תיקיית_נתיב)
delete_folders_count + = 1 # מספר מצטבר

# בדיקת קבצי הספריה הנוכחיים
לקובץ בקבצים:

# נתיב קובץ
file_path = os.path.join (root_folder, file)

# השוואת הימים
אם שניות >= get_file_or_folder_age (file_path):

# להפעיל את הפונקציה remove_file
remove_file (file_path)
delete_files_count + = 1 # מספר מצטבר

אחר:

# אם הנתיב אינו ספרייה
# השוואה עם הימים
אם שניות >= get_file_or_folder_age (נתיב):

# להפעיל את הקובץ
remove_file (נתיב)
delete_files_count + = 1 # מספר מצטבר

אחר:

# קובץ / תיקיה לא נמצא
הדפס (f ‘"{נתיב}" לא נמצא’)
delete_files_count + = 1 # מספר מצטבר

הדפס (f"סך התיקיות שנמחקו: {Delete_folders_count}")
הדפס (f"סך כל הקבצים שנמחקו: {delete_files_count}")

def remove_folder (נתיב):

# הסרת התיקיה
אם לא shutil.rmtree (נתיב):

# מסר הצלחה
הדפס (f"{path} הוסר בהצלחה")

אחר:

# הודעת כישלון
הדפס (f"לא ניתן למחוק את {path}")

def remove_file (נתיב):

# הסרת הקובץ
אם לא os. Remove (נתיב):

# מסר הצלחה
הדפס (f"{path} הוסר בהצלחה")

אחר:

# הודעת כישלון
הדפס (f"לא ניתן למחוק את {path}")

def get_file_or_folder_age (נתיב):

# קבלת זמן השעה של הקובץ / התיקיה
הזמן יהיה בשניות
ctime = os.stat (נתיב) .st_ctime

# החזרת הזמן
להחזיר זמן

אם __name__ == ‘__main__’:
עיקרי ()

עליך להתאים את שני המשתנים הבאים בקוד לעיל על סמך הדרישה.

ימים = 30
נתיב = "/ PATH_TO_DELETE"

מסיר קבצים הגדולים מ- X GB

בואו לחפש את הקבצים הגדולים מגודל מסוים ונמחק אותם. זה דומה לתסריט לעיל. בתסריט הקודם, לקחנו גיל כפרמטר ועכשיו ניקח גודל כפרמטר למחיקה.

# ייבוא ​​מודול OS
יבוא os

# פונקציה שמחזירה את גודל הקובץ
def get_file_size (נתיב):

# מקבל גודל קובץ בבתים
size = os.path.getsize (נתיב)

# החזרת גודל הקובץ
גודל החזר

# פונקציה למחיקת קובץ
def remove_file (נתיב):

# מחיקת הקובץ
אם לא os. Remove (נתיב):

# הצלחה
הדפס (f"{path} נמחק בהצלחה")

אחר:

# שגיאה
הדפס (f"לא ניתן למחוק את {path}")

def ראשי ():
# ציין את הנתיב
נתיב = "ENTER_PATH_HERE"

# הכניסו גודל מקסימלי לקובץ ב- MBs
גודל = 500

# לבדוק אם הנתיב קיים או לא
אם os.path.exists (נתיב):

# המרת גודל לבתים
גודל = גודל * 1024 * 1024

# חוצה בתיקיות המשנה
עבור root_folder, תיקיות, קבצים ב- os.walk (נתיב):

# iterating על רשימת הקבצים
לקובץ בקבצים:

# מקבל נתיב קבצים
file_path = os.path.join (root_folder, file)

# בדיקת גודל הקובץ
אם get_file_size (file_path) >= גודל:
# להפעיל את הפונקציה remove_file
remove_file (file_path)

אחר:

# בודק רק אם הנתיב הוא קובץ
אם os.path.isfile (נתיב):
# נתיב אינו כיוון
# בדיקת הקובץ ישירות
אם get_file_size (נתיב) >= גודל:
# להפעיל את הפונקציה remove_file
remove_file (נתיב)

אחר:

# נתיב לא קיים
הדפס (f"{נתיב} אינו קיים")

אם __name__ == ‘__main__’:
עיקרי ()

התאם את שני המשתנים הבאים.

נתיב = "ENTER_PATH_HERE"
גודל = 500

הסרת קבצים עם סיומת ספציפית

יכול להיות שיש תרחיש בו ברצונך למחוק קבצים לפי סוגי התוספים שלהם. נניח קובץ .log. אנו יכולים למצוא את הרחבת הקובץ בשיטת os.path.splitext (נתיב). זה מחזיר כיפה הכוללת את הנתיב ואת סיומת הקובץ.

# ייבוא ​​מודול OS
יבוא os

# פונקציה עיקרית
def ראשי ():

# ציין את הנתיב
נתיב = "PATH_TO_LOOK_FOR"

# ציין את התוסף
סיומת = ".יומן"

# לבדוק אם הנתיב קיים או לא
אם os.path.exists (נתיב):

# בדוק אם הנתיב הוא מדריך או לא
אם os.path.isdir (נתיב):

# iterating דרך תיקיות המשנה
עבור root_folder, תיקיות, קבצים ב- os.walk (נתיב):

# בדיקת הקבצים
לקובץ בקבצים:

# נתיב קובץ
file_path = os.path.join (root_folder, file)

# חילוץ סיומת משם הקובץ
file_extension = os.path.splitext (file_path) [1]

# בדיקת סיומת הקובץ
אם סיומת == file_extension:

# מחיקת הקובץ
אם לא os. Remove (file_path):

# מסר הצלחה
הדפס (f"{file_path} נמחק בהצלחה")

אחר:

# הודעת כישלון
הדפס (f"לא ניתן למחוק את {file_path}")

אחר:

# נתיב אינו מדריך
הדפס (f"{path} אינו מדריך")

אחר:

# נתיב לא קיים
הדפס (f"{נתיב} אינו קיים")

אם __name__ == ‘__main__’:
# להפעיל פונקציה ראשית
עיקרי ()

אל תשכח לעדכן את הנתיב ומשתנה התוסף בקוד לעיל כדי לעמוד בדרישות שלך.

הייתי מציע לבדוק את התסריטים בסביבת NON PRODUCTION. לאחר שאתה מרוצה מהתוצאות, אתה יכול לתזמן באמצעות cron (אם אתה משתמש ב- Linux) להריץ אותו מדי פעם לעבודות תחזוקה. פייתון נהדר להשיג את הדברים האלה ואם אתה מעוניין ללמוד לעשות יותר, בדוק זאת קורס אודמי.

תגיות:

  • פייתון

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map