删除具有特定扩展名的文件的脚本问题



我编写了以下脚本来删除具有特定扩展名的文件。但是,此脚本删除扩展名为'.log' or '.txt' or '.css'的文件。

如果文件扩展名是'.log000123''.log1234'怎么办,所以这里的扩展名是常量,但在扩展名之后添加了随机数。如何通过此脚本删除此类文件?

对脚本的任何修改或指向涵盖此类示例的任何网站的链接将不胜感激。

import os, time, sys
folder_path = "C:SampleFolder"
file_ends_with = ".log"
how_many_days_old_logs_to_remove = 7
now = time.time()
only_files = []
for file in os.listdir(folder_path):
file_full_path = os.path.join(folder_path,file)
if os.path.isfile(file_full_path) and file.endswith(file_ends_with):
#Delete files older than x days
if os.stat(file_full_path).st_mtime < now - how_many_days_old_logs_to_remove * 86400: 
os.remove(file_full_path)
print "n File Removed : " , file_full_path

您可以使用正则表达式并os.path.splitext

import os
import re
file = "myfile.log123"
pattern = ".log(.*)"  # match .log followed by anything
fname, ext = os.path.splitext(file)
# check this condition:
if re.match(pattern, ext):
# do stuff

这应该有效:

import os, time, sys
folder_path = "C:SampleFolder"
file_contains = ".log"
how_many_days_old_logs_to_remove = 7
now = time.time()
only_files = []
for file in os.listdir(folder_path):
file_full_path = os.path.join(folder_path,file)
if os.path.isfile(file_full_path) and file_contains in file_full_path:
#Delete files older than x days
if os.stat(file_full_path).st_mtime < now - how_many_days_old_logs_to_remove * 86400: 
os.remove(file_full_path)
print "n File Removed : " , file_full_path

试试这个:

import fnmatch
import os
matches = []
folder_path = "C:SampleFolder"
how_many_days_old_logs_to_remove = 7
now = time.time()
for root, dirnames, filenames in os.walk(folder_path):
for filename in fnmatch.filter(filenames, '*.log*'):
if os.stat(filename).st_mtime < now - how_many_days_old_logs_to_remove * 86400: 
os.remove(filename)
print "n File Removed : " , file_full_path
# matches.append(os.path.join(root, filename))

我们可以使用正则表达式来确定文件是否是log文件。

如果您的唯一意图是删除超过 7 天的日志文件,则可以使用datetime模块,而不是使用time模块。

看看下面的代码:

import re
import datetime
import os
folder_path = "C:SampleFolder"
only_files = []
for file in os.listdir(folder_path):
file_full_path = os.path.join(folder_path, file)
if os.path.isfile(file_full_path) and re.search(r".*.log.*", file_full_path):
# Delete files older than x days
last_mod_time = datetime.datetime.fromtimestamp(os.stat(file_full_path).st_mtime)
limt_mod_time = datetime.datetime.today() - datetime.timedelta(days=7)
if last_mod_time < limt_mod_time:
os.remove(file_full_path)
print("n File Removed : ", file_full_path)

最新更新