use*_*394 2 python file-io path
当文件数达到阈值时,我试图删除目录中最旧的文件。
list_of_files = os.listdir('log')
if len([name for name in list_of_files]) == 25:
oldest_file = min(list_of_files, key=os.path.getctime)
os.remove('log/'+oldest_file)
Run Code Online (Sandbox Code Playgroud)
问题:问题出在 min 方法中。list_of_files 不包含完整路径,因此它尝试在当前目录中搜索文件并失败。如何将目录名称('log')传递给 min()?
小智 8
list_of_files = os.listdir('log')
full_path = ["log/{0}".format(x) for x in list_of_files]
if len(list_of_files) == 25:
oldest_file = min(full_path, key=os.path.getctime)
os.remove(oldest_file)
Run Code Online (Sandbox Code Playgroud)
os.listdir将返回相对路径 - 这些是相对于您的 Python 脚本在其中执行的当前/当前工作目录/上下文的路径(您可以通过 看到os.getcwd())。
现在,该os.remove函数需要一个完整路径/绝对路径——shells/命令行接口推断出这一点并代表你这样做——但 Python 没有。您可以通过 using 获得它os.path.abspath,因此您可以将代码更改为:
list_of_files = os.listdir('log')
if len(list_of_files) >= 25:
oldest_file = min(list_of_files, key=os.path.getctime)
os.remove(os.path.abspath(oldest_file))
Run Code Online (Sandbox Code Playgroud)
这使它在来源方面保持通用 - 即,无论结果产生什么os.listdir- 您无需担心预先准备合适的文件路径。