打印未出现在Python文件夹中的数字

时间:2018-02-10 09:52:22

标签: python

我有一个文件夹,其中包含一个名为

的文件列表
0.csv, 1.csv, 2.csv .... 359.csv

如何提取这些文件名中缺少的数字?假设列表以0开头并以359结尾。

以下代码段读取文件夹中的所有文件。

import os,sys
folder = '..Acad/Code'
for filename in os.listdir(folder):
       infilename = os.path.join(folder,filename)

以下代码段显示整数列表中缺少的元素。

def missing_numbers(num_list):
      original_list = [x for x in range(num_list[0], num_list[-1] + 1)]
      num_list = set(num_list)
      return (list(num_list ^ set(original_list)))

如何修改上述代码段以从上一代码的输出中读取?任何的想法?

2 个答案:

答案 0 :(得分:2)

您的infilename不会收集该文件夹的所有文件名,因为您会在每个循环中覆盖它。因此它只显示最后一个条目。使用列表推导这个解决方案怎么样:

#separate the file name from the file name extension for each file in the folder
filenumbers = [x.split(".")[0] for x in os.listdir(folder)]
#compare numbers in expected range with file numbers in folder
missingnumbers = [i for i in range(360) if str(i) not in set(filenumbers)]

答案 1 :(得分:1)

您应该按如下方式生成set个整数:

my_set = set(int(f.split('.csv')[0]) for f in os.listdir('./') if os.path.isfile(f) and 'csv' in f)

然后将其与所有整数进行比较:

missing_ints = set(range(max(my_list))) - my_set
missing_files = [str(i) + '.csv' for i in missing_ints]

这将为您提供不在您拥有的文件列表中的整数

因此,如果您有0.csv 1.csv3.csv,则my_set{0, 1, 3}max(my_set)为3,set(range(max(my_list))){0, 1, 2, 3}然后差异missing_ints = set(range(max(my_list))) - my_set{2},因此missing_files = ['2.csv']

如果您有大量文件,比较set将比比较字符串更快。