Python函数os.listdir不显示目录中的所有文件

时间:2020-04-16 20:29:03

标签: python file

嗨,我正在尝试使用os.listdir加载几个文件,但它会跳过几个文件。

直接的文件格式为:

a_0.csv
a_1.csv
a_2.csv
  ·
  ·
  ·
a_25.csv

但是os.listdir仅接受文件 0,1,10,11 .. 编号为 3,4,5 ... 的文件不在输出对象中。

这是我的功能:

def best_fit_from_attemp(self):
    arr =[]
    for i in os.listdir(self.path_to_files):
        print("i",i)
        if i[0] == 'f' and  i[1] == 'i' and i[2] == 't':
            print("searching for smallest number... ",i)
            arr.append(self.find_min_fitness(i))

输出:

i fitness_gen_0.csv
searching for smallest number...  fitness_gen_0.csv
i fitness_gen_1.csv
searching for smallest number...  fitness_gen_1.csv
i fitness_gen_10.csv
searching for smallest number...  fitness_gen_10.csv
i fitness_gen_11.csv
searching for smallest number...  fitness_gen_11.csv

3 个答案:

答案 0 :(得分:1)

我的猜测是文件名都在那里,只是顺序不符合您的期望。

文件名是字符串。它们根据字符串排序逻辑进行排序:想象一下,将每个0替换为a,将每个1替换为b,将每个2替换为c,依此类推,现在考虑如何字符串将按字母顺序排列。普通的字符串排序并不知道我们喜欢写数字的最低有效位 last 。在普通的字符串排序中,它确实确实先执行1,然后进行10,然后进行11-类似于对字符串进行排序b,然后进行ba,然后进行{ {1}},这是正确的字典顺序。它会经过很长的时间才能到达以bb开头的任何内容(类似地,字典中以3开头的单词比以d开头的单词晚得多)。

您可以研究执行“自然排序”的算法/程序包。或者,最可取的最佳实践是简单地将文件命名约定改成开头:确保文件名中嵌入的数字都具有相同的数字位数,并在必要时使用前导零(b,{{ 1}}等。

答案 1 :(得分:0)

我非常确定问题出在函数self.find_min_fitness(i)上。列出前几个文件后,其中的某些部分必须导致程序中断。

文件按名称按os.listdir()排序。列出文件时,它优先使用1而不是2,这就是为什么所有以1开头的文件名都被列出的原因。

作为解决方案:也许尝试注释掉调用self.find_min_fitness(i)的这一行,看看问题是否仍然存在

答案 2 :(得分:0)

这似乎有问题。

self.find_min_fitness(i)

好吧,我建议您尝试这样的事情。

下面的目录包含编号的文件列表。

files = os.listdir("C:/Users/Danish/Documents/JavaScriptPrimerRepo/MyJSCodes")

for i in files:
    print(i)

这是下面的示例输出。

00_BlankPage.html
01_DataType.html
02_LinkingExternalJsfile.html
02_Script.js
03_VariableMutation_cohersion.html
04_Operators.html
05_SampleCodeCalculatingBMI.html

注意:我在迭代之前将结果存储在单独的变量中,重要的是fileName以数字开头。