【发布时间】:2014-08-31 02:09:46
【问题描述】:
我编写了一个 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
...
我在运行 Cygwin 的 64 位 Windows PC 上,它安装了 Python 版本 2.7.5。目标系统是运行 OpenSuse 的 Cray XK7,它安装了 Python 版本 2.6.8。
这可能是两个 Python 版本之间的区别,或者更确切地说是两个不同的操作系统之间的区别?
【问题讨论】:
-
您检查了所有文件吗? listdir 的结果没有排序。
-
尝试将目标系统升级到 2.7.5 以解决这个问题。如果这没有任何帮助,那么它可能是目标系统操作系统
-
@Daniel 有没有办法获取有序列表?
-
您可以尝试使用内置的排序方法,例如
for line in sorted(os.listdir(d)) -
os.listdir()中的结果顺序通常与底层文件系统中目录条目的原始顺序无关;该顺序取决于文件系统的实现,并且可能取决于文件的创建顺序(以及其他因素)。