在python中使用for循环探索目录 - 订单是否会更改?

时间:2015-07-14 15:32:27

标签: python linux

我的一个文件夹主要是json文件,我正在读取它们包含的数据,以便对SVM进行一些分类。我遇到的一个问题是基于这段代码:

    for filename in os.listdir(os.getcwd()):
       if re.search('.json$',filename):
            try:
               with open(filename) as json_data:
                   print filename

每次我输出输出时,我发现文件名总是以相同的顺序打印,如下所示:

    95231464576.json
    131777220274261.json
    17151210249.json
    122624927762214.json
    159287900855286.json
    155273941171682.json
    5265971983.json
    169635939813776.json
    159429967503904.json
    169114363192327.json
    170797436313930.json
    155963124522916.json

这个目录中有一些文本文件和一些python文件 我的问题是:是什么决定了这些文件的打印顺序? for 循环是否有办法查找文件?
我尝试检查这个顺序是基于大小(最大到最小或最小到最大)还是最后修改(我没有理由进行这些测试,我只是尝试过它们,因为我无法想到任何其他见解)。
我尝试了这个代码片段4次,每次的顺序都是一样的。

我在不同的文件夹中有一个标记的类,所以如果我能确定顺序,那么我的训练集的标签会有所帮助(我不知道这是多么好的想法)。

1 个答案:

答案 0 :(得分:2)

订单未定义,取决于文件系统。

我记得很多年前读过ext3而不是ext2的改进之一是将指针保留在目录列表中并开始对该条目进行下一个操作。通常一个程序将stat()然后打开()一个条目,因此从(内部)列表的开头扫描将发生两次ext2;使用ext3,第二个操作已经在所需的条目上,使搜索速度非常快。这对于目录中的许多文件都很重要。

列出目录的关键点将是该指针恰好出现的条目列表。此外,创建条目的顺序可能会影响订单。 ls程序在生成输出之前执行排序操作,以使其在视觉上一致且可用。