Python的os.listdir()为什么会跳过一些文件?

3
我已为一个给定目录编写了一个Python脚本,将所有文件名写入文件以供处理,它在我的机器上完美运行。但是当我尝试在目标机器上运行它时,它会跳过一些文件。以下是我正在使用的代码壳:
for line in os.listdir(d):
    f.write(line + "\n")

正如我所说,这在我的系统上按照广告宣传的方式工作,但在目标系统上却不行。数据是相同的;我在编写脚本时将其从目标系统转移到我的系统进行初步测试,并检查了两个数据源以验证在传输过程中是否丢失了任何内容。来自我的系统的输出如下:

filename.f0000
filename.f0001
filename.f0002
filename.f0003
...

但是目标系统的输出看起来像这样:
filename.f0000
filename.f0003
filename.f0008
filename.f0017
...

我在一台安装了Python 2.7.5的64位Windows PC上运行Cygwin。目标系统是一台运行OpenSUSE操作系统的Cray XK7,它安装了Python 2.6.8版本。这可能是两个不同Python版本之间的差异,还是两个不同操作系统之间的差异?

4
您已经检查了所有文件吗?listdir函数返回的结果没有排序。 - Daniel
@Daniel,有没有一种方法可以得到一个有序列表呢? - Jonathan E. Landrum
@heinst 不幸的是,这是不可能的。目标系统是政府拥有的研究系统;我只有每月分配的小时数。 - Jonathan E. Landrum
3
您可以尝试使用内置的“sorted”方法,例如 for line in sorted(os.listdir(d))。该方法可对文件列表进行排序,使其更加有序。 - Mariatta
1
os.listdir() 的结果顺序通常是底层文件系统中目录条目的原始顺序;该顺序取决于文件系统实现,可以取决于文件创建的顺序(以及其他因素)。 - Adam Rosenfield
显示剩余5条评论
1个回答

4

您可以尝试使用内置的排序方法,例如

for line in sorted(os.listdir(d)):
    f.write(line + "\n")

以下是来自 Python 文档的更多信息,可能对您有所帮助:https://docs.python.org/2/library/os.html

os.listdir(path)

返回一个列表,其中包含路径所指定目录中所有条目的名称。该列表没有特定顺序。即使在目录中存在 '.' 和 '..',它们也不会被包括在内。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接