Python Script để xóa các quy định tập tin

Làm sạch hệ thống tập tin thường xuyên bằng tay là không tốt. Tự động hóa chúng!


Xóa các tệp và thư mục theo cách thủ công không phải là một nhiệm vụ thú vị, như người ta có thể nghĩ. Nó có ý nghĩa để tự động hóa chúng.

Đây là Python để làm cho cuộc sống của chúng ta dễ dàng hơn. Python là một ngôn ngữ lập trình tuyệt vời cho kịch bản. Chúng tôi sẽ tận dụng Python để hoàn thành nhiệm vụ của mình mà không gặp trở ngại nào. Trước tiên, bạn nên biết tại sao Python là một lựa chọn tốt.

  • Python là ngôn ngữ yêu thích mọi thời đại để tự động hóa các tác vụ
  • Ít mã hơn so với các ngôn ngữ lập trình khác
  • Python tương thích với tất cả các hệ điều hành. Bạn có thể chạy cùng một mã trong Windows, Linux và Mac.
  • Python có một mô-đun gọi là os giúp chúng ta tương tác với hệ điều hành. Chúng tôi sẽ sử dụng mô-đun này để hoàn thành tự động xóa các tệp.

Chúng tôi có thể thay thế bất kỳ tác vụ hệ thống gây phiền nhiễu hoặc lặp đi lặp lại bằng Python. Viết kịch bản để hoàn thành một nhiệm vụ hệ thống cụ thể là một cupcake nếu bạn biết Python. Hãy để xem xét trường hợp sử dụng sau đây.

Lưu ý: những điều sau đây được thử nghiệm trên Python 3.6+

Xóa các tệp / thư mục cũ hơn X ngày

Thường thì bạn không cần nhật ký cũ và bạn thường xuyên cần dọn dẹp chúng để lưu trữ. Nó có thể là bất cứ điều gì và không chỉ là nhật ký.

Chúng tôi có một phương thức gọi là stat trong mô-đun os cung cấp chi tiết về lần truy cập cuối cùng (st_atime), sửa đổi (st_mtime), và sửa đổi siêu dữ liệu (thời gian) thời gian. Tất cả các phương thức trả về thời gian tính bằng giây kể từ kỷ nguyên. Bạn có thể tìm thêm chi tiết về kỷ nguyên đây.

Chúng tôi sẽ sử dụng một phương thức gọi là os.walk (đường dẫn) để duyệt qua các thư mục con của thư mục.

Thực hiện theo các bước dưới đây để viết mã cho các tệp / thư mục xóa dựa trên số ngày.

  • Nhập các mô-đun thời gian, os, đóng cửa
  • Đặt đường dẫn và ngày cho các biến
  • Chuyển đổi số ngày thành giây bằng cách sử dụng thời gian.time () phương pháp
  • Kiểm tra xem đường dẫn có tồn tại hay không sử dụng os.path.exists (đường dẫn) mô-đun
  • Nếu đường dẫn tồn tại, sau đó lấy danh sách các tệp và thư mục có trong đường dẫn, bao gồm cả các thư mục con. Sử dụng phương pháp os.walk (đường dẫn), và nó sẽ trả về một trình tạo chứa các thư mục, tệp và thư mục con
  • Nhận đường dẫn của tệp hoặc thư mục bằng cách nối cả đường dẫn hiện tại và tên tệp / thư mục bằng phương thức os.path.join ()
  • Nhận được thời gian từ os.stat (đường dẫn) phương thức sử dụng thuộc tính thời gian
  • So sánh thời gian với thời gian chúng tôi đã tính toán trước đó
  • Nếu kết quả lớn hơn số ngày mong muốn của người dùng, thì hãy kiểm tra xem đó là tệp hay thư mục. Nếu nó là một tập tin, sử dụng os.remove (đường dẫn) khác sử dụng shutil.rmtree () phương pháp
  • Nếu đường dẫn không tồn tại, in thông báo không tìm thấy

Hãy để xem chi tiết mã.

# nhập các mô-đun cần thiết
nhập khẩu os
đóng cửa nhập khẩu
thời gian nhập khẩu

# chức năng chính
def chính ():

# khởi tạo số đếm
đã xóa_ Folders_count = 0
đã xóa_files_count = 0

# chỉ định đường dẫn
đường dẫn = "/ PATH_TO_DELETE"

# chỉ định ngày
ngày = 30

# chuyển đổi ngày thành giây
# time.time () trả về thời gian hiện tại tính bằng giây
giây = time.time () – (ngày * 24 * 60 * 60)

# kiểm tra xem tập tin có trong đường dẫn hay không
if os.path.exists (đường dẫn):

# lặp qua từng thư mục và tệp trong đường dẫn
cho root_folder, thư mục, tệp trong os.walk (đường dẫn):

# so sánh ngày
nếu giây >= get_file_or_folder_age (root_folder):

# xóa thư mục
remove_folder (root_folder)
đã xóa_printers_count + = 1 # số tăng

# phá vỡ sau khi xóa root_folder
phá vỡ

khác:

# kiểm tra thư mục từ root_folder
cho thư mục trong các thư mục:

# đường dẫn thư mục
thư mục_path = os.path.join (root_folder, thư mục)

# so sánh với ngày
nếu giây >= get_file_or_folder_age (thư mục_path):

# gọi hàm remove_folder
remove_folder (thư mục_path)
đã xóa_printers_count + = 1 # số tăng

# kiểm tra các tập tin thư mục hiện tại
cho tập tin trong tập tin:

# đường dẫn tập tin
file_path = os.path.join (root_folder, tệp)

# so sánh ngày
nếu giây >= get_file_or_folder_age (file_path):

# gọi hàm remove_file
remove_file (file_path)
đã xóa_files_count + = 1 # số tăng

khác:

# nếu đường dẫn không phải là một thư mục
# so sánh với ngày
nếu giây >= get_file_or_folder_age (đường dẫn):

# gọi tập tin
remove_file (đường dẫn)
đã xóa_files_count + = 1 # số tăng

khác:

# tập tin / thư mục không được tìm thấy
in (f ‘"{con đường}" không tìm thấy ‘)
đã xóa_files_count + = 1 # số tăng

in (f"Tổng số thư mục đã bị xóa: {remove_ Folders_count}")
in (f"Tổng số tệp đã bị xóa: {remove_files_count}")

def remove_folder (đường dẫn):

# xóa thư mục
nếu không đóng cửa.rmtree (đường dẫn):

# gửi tin thành công
in (f"{path} được xóa thành công")

khác:

# thông báo thất bại
in (f"Không thể xóa {path}")

def remove_file (đường dẫn):

# xóa tệp
nếu không os.remove (đường dẫn):

# gửi tin thành công
in (f"{path} được xóa thành công")

khác:

# thông báo thất bại
in (f"Không thể xóa {path}")

def get_file_or_folder_age (đường dẫn):

# nhận ctime của tập tin / thư mục
# thời gian sẽ tính bằng giây
ctime = os.stat (đường dẫn) .st_ctime

# trả lại thời gian
trả lại thời gian

if __name__ == ‘__main__’:
chủ yếu()

Bạn cần điều chỉnh hai biến sau trong đoạn mã trên dựa trên yêu cầu.

ngày = 30
đường dẫn = "/ PATH_TO_DELETE"

Xóa các tệp lớn hơn X GB

Hãy để tìm kiếm các tập tin lớn hơn một kích thước cụ thể và xóa chúng. Nó tương tự như kịch bản trên. Trong kịch bản trước, chúng tôi đã thực hiện tuổi tác như một tham số, và bây giờ chúng ta sẽ lấy kích thước như là một tham số để xóa.

# nhập mô-đun os
nhập khẩu os

# hàm trả về kích thước của tệp
def get_file_size (đường dẫn):

# nhận kích thước tệp theo byte
kích thước = os.path.getsize (đường dẫn)

# trả về kích thước của tệp
kích thước trở lại

# chức năng xóa một tập tin
def remove_file (đường dẫn):

# xóa tập tin
nếu không os.remove (đường dẫn):

# sự thành công
in (f"{path} đã bị xóa thành công")

khác:

# lỗi
in (f"Không thể xóa {path}")

def chính ():
# chỉ định đường dẫn
đường dẫn = "ENTER_PATH_HERE"

# đặt kích thước tối đa của tệp tính bằng MB
kích thước = 500

# kiểm tra xem đường dẫn có tồn tại hay không
if os.path.exists (đường dẫn):

# chuyển đổi kích thước thành byte
kích thước = kích thước * 1024 * 1024

# duyệt qua các thư mục con
cho root_folder, thư mục, tệp trong os.walk (đường dẫn):

# lặp qua danh sách tập tin
cho tập tin trong tập tin:

# nhận đường dẫn tệp
file_path = os.path.join (root_folder, tệp)

# kiểm tra kích thước tập tin
nếu get_file_size (file_path) >= kích thước:
# gọi hàm remove_file
remove_file (file_path)

khác:

# chỉ kiểm tra nếu đường dẫn là tệp
nếu os.path.isfile (đường dẫn):
# đường dẫn không phải là một thư mục
# kiểm tra tệp trực tiếp
nếu get_file_size (đường dẫn) >= kích thước:
# gọi hàm remove_file
remove_file (đường dẫn)

khác:

# đường dẫn không tồn tại
in (f"{path} không tồn tại")

if __name__ == ‘__main__’:
chủ yếu()

Điều chỉnh hai biến sau.

đường dẫn = "ENTER_PATH_HERE"
kích thước = 500

Xóa các tệp có phần mở rộng cụ thể

Có thể có một kịch bản mà bạn muốn xóa các tệp theo loại tiện ích mở rộng của chúng. Hãy để tập tin nói .log .log. Chúng ta có thể tìm thấy phần mở rộng của một tệp bằng phương thức os.path.splitext (path). Nó trả về một tuple chứa đường dẫn và phần mở rộng của tệp.

# nhập mô-đun os
nhập khẩu os

# chức năng chính
def chính ():

# chỉ định đường dẫn
đường dẫn = "PATH_TO_LOOK_FOR"

# chỉ định tiện ích mở rộng
mở rộng = ".đăng nhập"

# kiểm tra xem đường dẫn có tồn tại hay không
if os.path.exists (đường dẫn):

# kiểm tra xem đường dẫn có phải là thư mục hay không
if os.path.itorir (đường dẫn):

# lặp qua các thư mục con
cho root_folder, thư mục, tệp trong os.walk (đường dẫn):

# kiểm tra các tập tin
cho tập tin trong tập tin:

# đường dẫn tập tin
file_path = os.path.join (root_folder, tệp)

# giải nén phần mở rộng từ tên tệp
file_extension = os.path.splitext (file_path) [1]

# kiểm tra file_extension
nếu phần mở rộng == file_extension:

# xóa tập tin
nếu không os.remove (file_path):

# gửi tin thành công
in (f"{file_path} đã xóa thành công")

khác:

# thông báo thất bại
in (f"Không thể xóa {file_path}")

khác:

# đường dẫn không phải là một thư mục
in (f"{path} không phải là một thư mục")

khác:

# đường dẫn không tồn tại
in (f"{path} không tồn tại")

if __name__ == ‘__main__’:
# gọi chức năng chính
chủ yếu()

Don Cầu quên cập nhật đường dẫn và biến mở rộng trong đoạn mã trên để đáp ứng yêu cầu của bạn.

Tôi sẽ đề nghị thử nghiệm các tập lệnh trong môi trường NON SẢN XUẤT. Khi bạn hài lòng với kết quả, bạn có thể lên lịch qua cron (nếu sử dụng Linux) để chạy định kỳ cho công việc bảo trì. Python thật tuyệt khi đạt được thứ này và nếu muốn học hỏi nhiều hơn thì hãy xem cái này Khóa học của kẻ thù.

THẺ

  • Con trăn

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