Python Scripts เพื่อลบไฟล์ Regulary

การทำความสะอาดระบบไฟล์ด้วยตนเองเป็นประจำนั้นไม่ดี ทำให้เป็นอัตโนมัติ!


การลบไฟล์และโฟลเดอร์ด้วยตนเองไม่ใช่งานที่น่าตื่นเต้นอย่างที่คิด มันสมเหตุสมผลที่จะทำให้เป็นอัตโนมัติ.

Python มาที่นี่เพื่อทำให้ชีวิตของเราง่ายขึ้น Python เป็นภาษาการเขียนโปรแกรมที่ยอดเยี่ยมสำหรับการเขียนสคริปต์ เราจะใช้ประโยชน์จาก Python เพื่อทำงานให้สำเร็จโดยไม่มีอุปสรรคใด ๆ ก่อนอื่นคุณควรรู้ว่าทำไม Python จึงเป็นตัวเลือกที่ดี.

  • Python เป็นภาษาที่โปรดปรานตลอดเวลาสำหรับการทำงานอัตโนมัติ
  • โค้ดน้อยกว่าเมื่อเปรียบเทียบกับภาษาการเขียนโปรแกรมอื่น
  • Python เข้ากันได้กับทุกระบบปฏิบัติการ คุณสามารถเรียกใช้รหัสเดียวกันใน Windows, Linux และ Mac.
  • Python มีโมดูลที่ชื่อว่า os ซึ่งช่วยให้เราสามารถโต้ตอบกับระบบปฏิบัติการได้ เรากำลังจะใช้โมดูลนี้เพื่อทำให้การลบไฟล์อัตโนมัติสมบูรณ์.

เราสามารถแทนที่งานระบบที่น่ารำคาญหรือซ้ำ ๆ โดยใช้ Python การเขียนสคริปต์เพื่อให้งานระบบเฉพาะเป็นคัพเค้กหากคุณรู้จัก Python ลองดูกรณีการใช้งานต่อไปนี้.

หมายเหตุ: สิ่งต่อไปนี้ได้รับการทดสอบใน Python 3.6+

การลบไฟล์ / โฟลเดอร์ที่เก่ากว่า X วัน

บ่อยครั้งที่คุณไม่ต้องการบันทึกเก่า ๆ และคุณต้องทำความสะอาดเป็นประจำเพื่อให้มีพื้นที่เก็บข้อมูล มันอาจเป็นอะไรก็ได้และไม่ใช่แค่บันทึก.

เรามีวิธีการที่เรียกว่าสถิติในโมดูลระบบปฏิบัติการที่ให้รายละเอียดของการเข้าถึงล่าสุด (st_atime), การแก้ไข (st_mtime), และการปรับเปลี่ยนข้อมูลเมตา (st_ctime) เวลา. เมธอดทั้งหมดคืนค่าเวลาเป็นวินาทีตั้งแต่ยุค คุณสามารถค้นหารายละเอียดเพิ่มเติมเกี่ยวกับยุค ที่นี่.

เราจะใช้วิธีการที่เรียกว่า os.walk (เส้นทาง) สำหรับการข้ามผ่านโฟลเดอร์ย่อยของโฟลเดอร์.

ทำตามขั้นตอนด้านล่างเพื่อเขียนรหัสสำหรับไฟล์ / โฟลเดอร์ลบตามจำนวนวัน.

  • นำเข้าโมดูล เวลา, OS, shutil
  • กำหนดเส้นทางและวันเป็นตัวแปร
  • แปลงจำนวนวันเป็นวินาทีโดยใช้ time.time () วิธี
  • ตรวจสอบว่าเส้นทางนั้นมีอยู่หรือไม่ใช้ os.path.exists (เส้นทาง) โมดูล
  • หากเส้นทางนั้นมีอยู่ให้รับรายการไฟล์และโฟลเดอร์ที่มีอยู่ในพา ธ รวมถึงโฟลเดอร์ย่อย ใช้วิธีการ os.walk (เส้นทาง), และจะส่งคืนตัวสร้างที่มีโฟลเดอร์ไฟล์และโฟลเดอร์ย่อย
  • รับพา ธ ของไฟล์หรือโฟลเดอร์โดยรวมทั้งเส้นทางปัจจุบันและชื่อไฟล์ / โฟลเดอร์โดยใช้วิธีการ os.path.join ()
  • รับ ctime จาก os.stat (เส้นทาง) วิธีการใช้คุณลักษณะ st_ctime
  • เปรียบเทียบ ctime กับเวลาที่เราคำนวณไปก่อนหน้านี้
  • หากผลลัพธ์มากกว่าวันที่ต้องการของผู้ใช้ให้ตรวจสอบว่าเป็นไฟล์หรือโฟลเดอร์ หากเป็นไฟล์ให้ใช้ os.remove (เส้นทาง) อื่นใช้ shutil.rmtree () วิธี
  • หากไม่มีเส้นทางให้พิมพ์ข้อความไม่พบ

ลองดูรหัสโดยละเอียด.

# การนำเข้าโมดูลที่ต้องการ
นำเข้าระบบปฏิบัติการ
นำเข้า shutil
เวลานำเข้า

# ฟังก์ชั่นหลัก
def main ():

# การเริ่มต้นการนับ
delete_folders_count = 0
delete_files_count = 0

# ระบุเส้นทาง
เส้นทาง = "/ PATH_TO_DELETE"

# ระบุวัน
วัน = 30

# แปลงวันเป็นวินาที
# time.time () ส่งคืนเวลาปัจจุบันเป็นวินาที
วินาที = time.time () – (วัน * 24 * 60 * 60)

# ตรวจสอบว่ามีไฟล์อยู่ในพา ธ หรือไม่
ถ้า os.path.exists (เส้นทาง):

# วนซ้ำในแต่ละโฟลเดอร์และทุกไฟล์ในพา ธ
สำหรับ root_folder, โฟลเดอร์, ไฟล์ใน os.walk (พา ธ ):

# เปรียบเทียบวัน
ถ้าวินาที >= get_file_or_folder_age (root_folder):

# ลบโฟลเดอร์
remove_folder (root_folder)
delete_folders_count + = 1 # จำนวนที่เพิ่มขึ้น

# ทำลายหลังจากลบ root_folder
หยุดพัก

อื่น:

# กำลังตรวจสอบโฟลเดอร์จาก root_folder
สำหรับโฟลเดอร์ในโฟลเดอร์:

# เส้นทางโฟลเดอร์
folder_path = os.path.join (root_folder, โฟลเดอร์)

# เปรียบเทียบกับวัน
ถ้าวินาที >= get_file_or_folder_age (folder_path):

# เรียกใช้ฟังก์ชัน remove_folder
remove_folder (FOLDER_PATH)
delete_folders_count + = 1 # จำนวนที่เพิ่มขึ้น

# ตรวจสอบไฟล์ไดเรกทอรีปัจจุบัน
สำหรับไฟล์ในไฟล์:

# เส้นทางไฟล์
file_path = os.path.join (root_folder ไฟล์)

# เปรียบเทียบวัน
ถ้าวินาที >= 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 # จำนวนที่เพิ่มขึ้น

อื่น:

ไม่พบ # ไฟล์ / โฟลเดอร์
พิมพ์ (ฉ’"{เส้นทาง}" ไม่พบ ‘)
delete_files_count + = 1 # จำนวนที่เพิ่มขึ้น

พิมพ์ (ฉ"ลบโฟลเดอร์ทั้งหมด: {delete_folders_count}")
พิมพ์ (ฉ"ลบไฟล์ทั้งหมด: {delete_files_count}")

def remove_folder (พา ธ ):

# ลบโฟลเดอร์
ถ้าไม่ใช่ shutil.rmtree (เส้นทาง):

# ข้อความสำเร็จ
พิมพ์ (ฉ"ลบ {path} สำเร็จแล้ว")

อื่น:

# ข้อความล้มเหลว
พิมพ์ (ฉ"ไม่สามารถลบ {path}")

def remove_file (พา ธ ):

# ลบไฟล์
ถ้าไม่ใช่ os.remove (พา ธ ):

# ข้อความสำเร็จ
พิมพ์ (ฉ"ลบ {path} สำเร็จแล้ว")

อื่น:

# ข้อความล้มเหลว
พิมพ์ (ฉ"ไม่สามารถลบ {path}")

def get_file_or_folder_age (เส้นทาง):

# รับเวลาของไฟล์ / โฟลเดอร์
# time จะเป็นวินาที
ctime = os.stat (เส้นทาง) .st_ctime

# ส่งคืนเวลา
ส่งคืน ctime

ถ้า __name__ == ‘__main__’:
หลัก()

คุณจำเป็นต้องปรับตัวแปรสองตัวต่อไปนี้ในโค้ดด้านบนตามข้อกำหนด.

วัน = 30
เส้นทาง = "/ PATH_TO_DELETE"

การลบไฟล์ที่มีขนาดใหญ่กว่า X GB

ลองค้นหาไฟล์ที่มีขนาดใหญ่กว่าขนาดที่ต้องการแล้วลบออก มันคล้ายกับสคริปต์ข้างต้น ในสคริปต์ก่อนหน้านี้เราได้ดำเนินการ อายุ เป็นพารามิเตอร์และตอนนี้เราจะใช้ ขนาด เป็นพารามิเตอร์สำหรับการลบ.

# การนำเข้าโมดูลระบบปฏิบัติการ
นำเข้าระบบปฏิบัติการ

# ฟังก์ชันที่คืนค่าขนาดไฟล์
def get_file_size (เส้นทาง):

# รับขนาดไฟล์เป็นไบต์
size = os.path.getsize (พา ธ )

# ส่งคืนขนาดของไฟล์
ขนาดผลตอบแทน

ฟังก์ชัน # เพื่อลบไฟล์
def remove_file (พา ธ ):

# การลบไฟล์
ถ้าไม่ใช่ os.remove (เส้นทาง):

# สำเร็จ
พิมพ์ (ฉ"ลบ {path} สำเร็จแล้ว")

อื่น:

# ข้อผิดพลาด
พิมพ์ (ฉ"ไม่สามารถลบ {path}")

def main ():
# ระบุเส้นทาง
เส้นทาง = "ENTER_PATH_HERE"

# ใส่ขนาดไฟล์สูงสุดเป็น MB
ขนาด = 500

# ตรวจสอบว่าเส้นทางนั้นมีอยู่หรือไม่
ถ้า os.path.exists (เส้นทาง):

# การแปลงขนาดเป็นไบต์
ขนาด = ขนาด * 1024 * 1024

# สำรวจผ่านโฟลเดอร์ย่อย
สำหรับ root_folder, โฟลเดอร์, ไฟล์ใน os.walk (พา ธ ):

# วนซ้ำในรายการไฟล์
สำหรับไฟล์ในไฟล์:

# รับเส้นทางไฟล์
file_path = os.path.join (root_folder ไฟล์)

# ตรวจสอบขนาดไฟล์
ถ้า get_file_size (file_path) >ขนาด =:
# เรียกใช้ฟังก์ชัน remove_file
remove_file (file_path)

อื่น:

# ตรวจสอบเฉพาะในกรณีที่เส้นทางเป็นไฟล์
ถ้า os.path.isfile (เส้นทาง):
# path ไม่ใช่ dir
# ตรวจสอบไฟล์โดยตรง
ถ้า get_file_size (พา ธ ) >ขนาด =:
# เรียกใช้ฟังก์ชัน remove_file
remove_file (เส้นทาง)

อื่น:

# path ไม่มีอยู่
พิมพ์ (ฉ"{path} ไม่มีอยู่")

ถ้า __name__ == ‘__main__’:
หลัก()

ปรับตัวแปรสองตัวต่อไปนี้.

เส้นทาง = "ENTER_PATH_HERE"
ขนาด = 500

การลบไฟล์ที่มีนามสกุลเฉพาะ

อาจมีสถานการณ์ที่คุณต้องการลบไฟล์ตามประเภทส่วนขยาย สมมุติว่าไฟล์. log เราสามารถค้นหาส่วนขยายของไฟล์โดยใช้วิธี os.path.splitext (เส้นทาง) ส่งคืน tuple ที่มีพา ธ และส่วนขยายของไฟล์.

# การนำเข้าโมดูลระบบปฏิบัติการ
นำเข้าระบบปฏิบัติการ

# ฟังก์ชั่นหลัก
def main ():

# ระบุเส้นทาง
เส้นทาง = "PATH_TO_LOOK_FOR"

# ระบุนามสกุล
นามสกุล = ".เข้าสู่ระบบ"

# ตรวจสอบว่าเส้นทางนั้นมีอยู่หรือไม่
ถ้า os.path.exists (เส้นทาง):

# ตรวจสอบว่าเส้นทางเป็นไดเรกทอรีหรือไม่
ถ้า os.path.isdir (เส้นทาง):

# วนซ้ำผ่านโฟลเดอร์ย่อย
สำหรับ root_folder, โฟลเดอร์, ไฟล์ใน os.walk (พา ธ ):

# การตรวจสอบไฟล์
สำหรับไฟล์ในไฟล์:

# เส้นทางไฟล์
file_path = os.path.join (root_folder ไฟล์)

# แยกส่วนขยายจากชื่อไฟล์
file_extension = os.path.splitext (file_path) [1]

# กำลังตรวจสอบ file_extension
ถ้านามสกุล == file_extension:

# การลบไฟล์
ถ้าไม่ใช่ os.remove (file_path):

# ข้อความสำเร็จ
พิมพ์ (ฉ"ลบ {file_path} สำเร็จแล้ว")

อื่น:

# ข้อความล้มเหลว
พิมพ์ (ฉ"ไม่สามารถลบ {file_path}")

อื่น:

# path ไม่ใช่ไดเรกทอรี
พิมพ์ (ฉ"{path} ไม่ใช่ไดเรกทอรี")

อื่น:

# path ไม่มีอยู่
พิมพ์ (ฉ"{path} ไม่มีอยู่")

ถ้า __name__ == ‘__main__’:
# เรียกใช้ฟังก์ชั่นหลัก
หลัก()

อย่าลืมอัปเดตเส้นทางและตัวแปรส่วนขยายในรหัสด้านบนเพื่อตอบสนองความต้องการของคุณ.

ฉันขอแนะนำให้ทดสอบสคริปต์ในสภาพแวดล้อมที่ไม่มีการผลิต เมื่อคุณพอใจกับผลลัพธ์แล้วคุณสามารถกำหนดเวลาผ่าน cron (หากใช้ Linux) เพื่อเรียกใช้เป็นระยะ ๆ สำหรับงานบำรุงรักษา Python นั้นยอดเยี่ยมในการทำสิ่งนี้ให้สำเร็จและหากสนใจที่จะเรียนรู้ที่จะทำมากกว่านี้ แน่นอน Udemy.

Tags:

  • หลาม

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