【问题标题】:Directory search returns incorrect number of files目录搜索返回的文件数不正确
【发布时间】:2021-01-29 18:46:03
【问题描述】:

我正在使用 Python3、Linux Mint 和 Visual Studio Code。

同样使用以下代码查看目录中是否存在任何 evtx 文件:

    print("Number of EVTX files in each individual folder:")
path = '/home/user/CI5235_K1915147_Sam/evtx_logs'
folders = ([name for name in os.listdir(path)])
targets = []
for folder in folders:
    contents = os.listdir(os.path.join(path,folder))
    for i in contents:
        if i.endswith('evtx'):
            targets.append(i)
    print(folder, len(contents))
print ("Total number of evtx files = " + str(len(targets)))

print()

它搜索 evtx_logs 的目录和子目录并列出其中的每个文件。我将如何修改它,使其仅计算 evtx 文件,因为它当前也在计算文件夹中的其他 .xml 文件。

【问题讨论】:

  • os.path.splitextglob 都可以成为你的朋友。
  • 太棒了!我将如何在我的代码中实现它?导入 glob 模块并从那里导入?我对 Python 还很陌生!
  • 我已经导入了操作系统

标签: python linux file linux-mint


【解决方案1】:

按照上面的建议修改了您现有的代码以使用glob

#!/usr/bin/env python3
import os
import glob
print("Number of EVTX files in each individual folder:")
path = '/home/user/CI5235_K1915147_Sam/evtx_logs'
folders = ([name for name in os.listdir(path)])
targets = []
for folder in folders:
    contents = glob.glob(os.path.join(path,folder)+"/*evtx")
    for i in contents:
        targets.append(i)
    print(folder, len(contents))
print ("Total number of evtx files = " + str(len(targets)))

print()

您自己的代码的问题在于您打印的是内容的长度(始终是目录中的所有文件),而不是来自if i.endswith('evtx'): 的匹配数。

【讨论】:

  • 谢谢叮叮!我对 Python 还很陌生,所以这对我很有帮助!像你这样的人真正让我在 SO 社区感到自在!
  • 不客气,我很高兴听到这个消息……不过,这些 cmets 可能会被删除,因为它们不会为整个网站增加价值 ;) ...如果答案符合您的预期,请随意“接受”。
  • 它有效!!!!如果 cmets 被移除,那就太可惜了……你可以随时添加我的不和谐;)
  • 这很奇怪......它对我有用(按设计)......justpaste.it/1nm9v
  • 刚刚重新编辑了我的评论!我误读了终端:S
猜你喜欢
  • 1970-01-01
  • 2021-08-17
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多