当前位置: 首页 > 知识库问答 >
问题:

Python中如何统计匹配文件的数量?

易骁
2023-03-14

我有命名如下的文件:

>

  • 文件-001-001.dat
  • 文件-001-002.dat
  • 文件-001-003.dat
  • 文件-001-004.dat
  • 文件-001-005.dat

    文件-002-001.dat

    文件-002-004.dat

    文件-003-001.dat

    file-003-008.dat

    file-999-010.dat

    我正在尝试计算相同第一个数字的文件数,例如代码应该给我以001开头的文件数为5,002为4,…999为1。

    我已经成功地使用以下代码完成了这项工作,该代码统计了“file_count”文件夹中的文件:

    from collections import Counter
    import numpy as np
    import os
    import re
    data_folders = []
    data_files = []
    for root, directories, files in sorted(os.walk('./file_count')):
        files = sorted([f for f in files if os.path.splitext(f)[1] in ('.dat,')])
        for file in files:
            data_folders.append(root)
            data_files.append((re.findall(r"[-+]?\d*\.\d+|\d+", file)[-2].zfill(3), re.findall(r"[-+]?\d*\.\d+|\d+", \
                file)[-1].zfill(3), os.path.join(root, file)))
    data_folders = np.unique(data_folders)
    data_files = sorted(data_files)
    a = np.array(data_files)
    print a[:, 0]
    c = Counter(a[:, 0])
    print c['001']
    

    有没有比这更简单、更高效的代码?有什么内置函数可以解决这个问题吗?

  • 共有3个答案

    马承
    2023-03-14

    当您将 R 标记添加到您的问题中(不确定为什么)时,这里有一个可能的 R 解决方案:

    table(sub('file-([0-9]{3})-[0-9]{3}.dat', '\\1', list.files()))
    

    如果目录中还有一些其他文件,则将该正则表达式作为 list.files模式参数传递,以仅列出相关文件。

    常嘉平
    2023-03-14

    您可以使用 os.listdir(),它将以字符串列表的形式返回您的文件名。

    接下来,使用re.match和列表理解来获取要分组的数字字符串列表。

    >>> stt = 'file-001-003.dat'
    >>> import re
    >>> k = re.match(r'.*?-(\d*?)-.*',stt)
    >>> k.group(1)
    '001'
    

    最后,使用 groupby 模块获取相同数字字符串的计数。

    请参见本SO for groupby:如何计算无序列表中元素的频率?

    颜志学
    2023-03-14

    以下方法应该有效:

    for k, g in itertools.groupby(files, key=lambda x:re.search('-(\d+)-', x).group(1)):
        print k, len(list(g))
    

    这将显示:

    001 5
    002 4
    003 8
    999 1
    
     类似资料:
    • 题目描述: 给定两个数组A和B,若数组A的某个元素A[i]与数组B中的某个元素B[j]满足 A[i] == B[j], 则寻找到一个值匹配的二元组(i, j). 请统计在这两个数组A和B中,一共存在多少个这样的二元组。  输入描述: 第一行输入数组A的长度M;第二行输入数组B的长度N;第三行输入数组A的值;第四行输入数组B的值。 1 <= M, N <= 100000 A, B数组中数值的取值均小

    • 问题内容: 我需要计算使用Python的目录中的文件数。 我猜最简单的方法是,但这也将目录本身视为文件。 有什么方法可以只计算 目录 中的文件吗? 问题答案: 会比使用效率更高。要测试文件名是否是普通文件(而不是目录或其他实体),请使用:

    • 问题内容: 我有一个类似… 的正则表达式模式,我需要搜索成千上万个文件(大小从1KB到24 MB不等)以成千上万个文件(介于100到8000之间)。 我想知道是否有比我尝试过的模式匹配更快的方法。 环境: 杰克1.8 Windows 10 Unix4j库 这是我到目前为止尝试过的 我明白了,这让我觉得我做错了什么。 我对流使用了不同的方法,平均每种方法需要大约一分钟的时间来处理当前的6660个文件

    • 找出 第1列中的最大值第一次出现的位置, 比方说这个 是索引19中的 27.78 从这个索引19 开始 往下 寻找第1列中所有介于27.78的值区间出现的次数 比方说 从 索引19 开始 往下查询 从索引24到326区间的值小于27.78 把这个区间作为 次数 1 516-519 这个区间作为 2 523-760区间作为3, 769-772 作为4 774-1114 作为5,共出现5次在这个区间的

    • 需要从log4j迁移到log4j2的帮助。我有一个滚动文件追加器。我需要这个appender来使用org中的“statisticsvlayout”。perf4j。以前在log4j1中。x版本我们使用log4j中的以下标记直接引用来自任何附录的统计数据。xml。 我们无法从log4j2确认这一点。xml,因为我们无法直接使用外部布局。请告诉我如何在log4j2中配置它。xml。

    • 问题内容: 如何查询以获取字段中匹配单词的数量,特别是在MySQL中。我只需要获取“搜索字词”出现在字段值中的次数即可。 例如,值是“一二一二”,所以当我搜索单词“一”时,它应该给我3 是否有可能?因为当前我只是从数据库中提取值,并使用服务器端语言进行计数。 谢谢 问题答案: 您可以创建一个可直接在SQL中使用的函数,以便一步一步完成所有操作。 这是我在MySQL网站上找到的函数: 您应该像这样使