【问题标题】:Python os.listdir() keeps skipping over some files?Python os.listdir() 不断跳过一些文件?
【发布时间】: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() 中的结果顺序通常与底层文件系统中目录条目的原始顺序无关;该顺序取决于文件系统的实现,并且可能取决于文件的创建顺序(以及其他因素)。

标签: python shell scripting


【解决方案1】:

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

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

这里有一些来自 python 文档的更多信息,您可能会觉得有帮助: https://docs.python.org/2/library/os.html

os.listdir(路径)

返回一个包含目录中条目名称的列表 由路径给出。 列表顺序随意。它不包括 特殊条目“。”和 '..' 即使它们出现在 目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-12
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多