Python scandir()排序\ POSIX readdir排序

时间:2016-12-21 08:15:12

标签: python linux posix

我有一个关于scandir函数排序的基本问题。到目前为止,我阅读了POSIX readdir的手册页,但未找到有关订购保证的具体信息。

但是当我遍历大目录(无法更改,只读)时,我在多个系统上观察到相同的结果(Fedora 24和Ubuntu 16.04)。

这种行为的原因是什么?我可以在哪里阅读更多信息?

如果我需要包含排序,我应该在POSIX scandir周围编写自己的包装器,还是有人知道python的现有实现?

2 个答案:

答案 0 :(得分:2)

readdir的手册页是明确的:

  

连续调用读取文件名的顺序          readdir()取决于文件系统的实现;不太可能          名称将以任何方式排序。

在大多数实现中,目录是顺序列表条目,readdirscandir都遵循基础顺序。如果您在不同的Linux版本上使用类似的文件系统,并以相同的顺序填充目录,则readdir可能也会给出相同的顺序。如果您不添加,删除或重命名任何文件(至少一旦文件系统稳定,因为有些可能会延迟某些操作),顺序不是随机的,绝对是确定性和可重现的。简单来说,文件名不是可预测的

因此,如果您想要一致的订单,您必须处理订购。

答案 1 :(得分:0)

要回答问题的第二部分,以下是一种实现方式:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { Ionic2RatingModule } from "ionic2-rating";
@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
 })
 export class HomePage {

    rate : any = 0;
 constructor(public navCtrl: NavController) {
     }
       onModelChange(event){
       this.rate = event;
         console.log(event);
          }
     }

在这里使用listdir()而不是scandir()来获取名称列表作为字符串,这比scandir()返回的DirEntry对象更容易排序。