【问题标题】:find missing numeric from ALPHANUMERIC - Python从 ALPHANUMERIC 中查找缺失的数字 - Python
【发布时间】:2009-04-15 02:36:48
【问题描述】:

如何在 Python 中编写一个函数来确定文件名列表是否与给定模式匹配以及该模式中缺少哪些文件?例如:

输入->

KUMAR.3.txt
KUMAR.4.txt
KUMAR.6.txt
KUMAR.7.txt
KUMAR.9.txt
KUMAR.10.txt
KUMAR.11.txt
KUMAR.13.txt
KUMAR.15.txt
KUMAR.16.txt

期望的输出-->

KUMAR.5.txt
KUMAR.8.txt
KUMAR.12.txt
KUMAR.14.txt

输入 -->

KUMAR3.txt
KUMAR4.txt
KUMAR6.txt
KUMAR7.txt
KUMAR9.txt
KUMAR10.txt
KUMAR11.txt
KUMAR13.txt
KUMAR15.txt
KUMAR16.txt

期望的输出 -->

KUMAR5.txt
KUMAR8.txt
KUMAR12.txt
KUMAR14.txt

【问题讨论】:

  • 请重新表述这个问题。完全不清楚您要的是什么。
  • 文件是否有序?文件总是匹配给定的模式吗? KUMAR.##.txt?

标签: python list filenames alphanumeric


【解决方案1】:

你可以这样处理:

  1. 将文件名转换为适当的整数。
  2. 找出缺失的数字。
  3. 将缺失的数字与文件名模板组合作为输出。

对于(1),如果文件结构是可预测的,那么这很容易。

def to_num(s, start=6):
    return int(s[start:s.index('.txt')])

给定:

lst = ['KUMAR.3.txt', 'KUMAR.4.txt', 'KUMAR.6.txt', 'KUMAR.7.txt',
       'KUMAR.9.txt', 'KUMAR.10.txt', 'KUMAR.11.txt', 'KUMAR.13.txt',
       'KUMAR.15.txt', 'KUMAR.16.txt']

您可以通过以下方式获取已知号码列表:map(to_num, lst)。当然,要寻找差距,你只需要最小值和最大值。将其与range 函数结合起来,您将获得所有应该看到的数字,然后删除您拥有的数字。套装在这里很有帮助。

def find_gaps(int_list):
    return sorted(set(range(min(int_list), max(int_list))) - set(int_list))

把它们放在一起:

missing = find_gaps(map(to_num, lst))
for i in missing:
    print 'KUMAR.%d.txt' % i

【讨论】:

    【解决方案2】:

    假设模式是相对静态的,这很容易使用正则表达式:

    import re
    
    inlist = "KUMAR.3.txt KUMAR.4.txt KUMAR.6.txt KUMAR.7.txt KUMAR.9.txt KUMAR.10.txt KUMAR.11.txt KUMAR.13.txt KUMAR.15.txt KUMAR.16.txt".split()
    
    def get_count(s):
        return int(re.match('.*\.(\d+)\..*', s).groups()[0])
    
    mincount = get_count(inlist[0])
    maxcount = get_count(inlist[-1])
    values = set(map(get_count, inlist))
    for ii in range (mincount, maxcount):
        if ii not in values:
            print 'KUMAR.%d.txt' % ii
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      相关资源
      最近更新 更多