我正在编写一个脚本,将扫描一堆日志文件以查找字符串和服务器名称。
在我的测试中,我使用glob()
创建了一个文件列表。
然而,为了改进我的测试,我从实际系统中复制了一个日志目录(11GB!)- 情况并不像之前那么顺利。看起来像是glob把子目录当作文件,因此readlines()
很难读取它们。
我不关心子目录中的文件,我只想浏览本地目录中的文件。
我认为我可以使用os.walk()
来实现这个目标,类似于:
logs = next(os.walk('var/opt/server/log/current'))[2]
与之相反:
logs = glob('/var/opt/server/log/current/*')
因为我正在学习Python,所以我想确保我以正确的方式学习东西...所以我上面说的是正确的吗?还是我应该稍微改变一下使用 glob()
的方式来实现这个目标?
next()
不是这里的正确工具,因为当它到达列表末尾时会引发StopIteration
。我想我可以使用try:
和except:
来处理StopIteration
,但这似乎很混乱。我已经读到for*()
将自动接受StopIteration
,所以也许通过目录列表进行for循环会更好? - jonnybinthemix