猿问

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

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


directiy文件格式为:


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


慕妹3146593
浏览 521回答 3
3回答

四季花海

我的猜测是文件名都在那里,只是没有按照您期望的顺序。文件名是字符串。它们根据字符串排序逻辑进行排序:想象将每个 0 替换为a ,将a每个 1 替换为 a b,将每个 2 替换为 ac等等,现在考虑如何按字母顺序对字符串进行排序。普通的字符串排序不知道我们喜欢用最不重要的数字last来写数字。在普通的字符串排序中,它确实是1, then 10, then 11——这类似于对字符串b, then ba, then进行排序bb,这是正确的字典排序。它会持续很长时间才能到达任何以开头3的单词(类似地,字典中以开头的单词d比以b)。您可以研究执行“自然排序”的算法/包。或者,更可取的最佳做法是简单地修复文件命名约定:确保文件名中嵌入的数字都具有相同的位数,必要时使用前导零(001、002等)。

喵喵时光机

这似乎值得怀疑。self.find_min_fitness(i)好吧,我建议你尝试这样的事情。下面的目录包含编号的文件列表。files = os.listdir("C:/Users/Danish/Documents/JavaScriptPrimerRepo/MyJSCodes")for i in files:    print(i)这是下面的示例输出。00_BlankPage.html01_DataType.html02_LinkingExternalJsfile.html02_Script.js03_VariableMutation_cohersion.html04_Operators.html05_SampleCodeCalculatingBMI.html注意:我在迭代之前将结果存储在单独的变量中,重要的是 fileName 首先以数字开头。

泛舟湖上清波郎朗

我很确定问题出在函数self.find_min_fitness(i)上。在列出前几个文件后,其中的某些部分必须导致程序中断。文件按名称排序os.listdir()。它优先1于2列出文件时,这就是为什么所有以开头的文件名1都首先列出的原因。作为解决方案:也许尝试注释掉self.find_min_fitness(i)调用的这一行,看看问题是否仍然存在
随时随地看视频慕课网APP

相关分类

Python
我要回答