【发布时间】:2017-02-19 15:25:18
【问题描述】:
我有一段脚本,它将创建一个文件列表以扫描关键字..
问题是,日志文件总共大约 11gb。当我在 shell 中使用 grep 搜索它们时,大约需要 4 或 5 分钟。当我使用我的 python 脚本执行此操作时,它只是将服务器挂起到我需要重新启动它的程度。
这似乎是不对的,它会导致整个服务器崩溃,但实际上我不需要它来滚动浏览所有文件,只需要在上周修改过的文件。
到目前为止我已经得到了这个:
logs = [log for log in glob('/var/opt/cray/log/p0-current/*') if not os.path.isdir(log)]
我假设我需要在此之前添加一些内容以最初过滤掉错误的文件?
我一直在玩这种格式的os.path.getmtime:
logs = [log for log in glob('/var/opt/cray/log/p0-current/*') if not os.path.isdir(log)]
for log in logs:
mtime = os.path.getmtime(log)
if mtime < "604800":
do-stuff (create a new list? Or update logs?)
这就是我现在所处的位置,它不起作用,但我希望内联列表可以做一些更优雅的事情?
【问题讨论】:
-
如果你想优雅地使用
man find。否则尝试创建一个Minimal, Complete, and Verifiable 示例。这让我们更容易为您提供帮助。 -
不确定你的意思,我不知道
find()是 Python 中的一个东西。我在学。我认为我对我的要求的解释是最小的、完整的和可验证的。希望进一步调整构建我的列表的条件。因此,目前列表logs包含大量文件名,但我想将其缩减为修改时间小于 604800 秒(1 周)的文件,我将其放在几秒钟内,因为当我使用 @ 987654329@ 然后打印出结果,我得到了一些巨大的数字。我查了os.path.getmtime(),发现结果是秒 -
@StephenRauch - 我可以使用类似于常规 shell 的东西吗?
find /path/to/logs -type f -mtime -7- 这样会干净得多。在 2 周内我一直在学习 Python .. 一切似乎都比普通的 shell 脚本冗长得多。我确信这是我缺乏理解,但目前我正在努力寻找 Python 优于 Bash 的好处。 -
是的,
man find注释是对查找手册页的引用。对于某些事情,命令行工具更加优雅,因为它们是为这些事情设计的。但是...一旦您的需求变得更加多样化或有深度,python 就是一个非常的好东西。如果您正在尝试使用 python 开发更多的能力,我鼓励您继续这里介绍的项目。但是,如果您需要 SO 用户的帮助,您应该创建一个 MCVE。