Python os.walk返回的文件少于C#Directory.GetFiles

时间:2019-01-25 16:28:54

标签: c# python methods

为什么python的os.walk返回的文件少于使用C#Directory.GetFiles的文件?使用相同的起始目录时,我希望得到相同的结果。

我的Python代码是:

import os
#Note that startdir is entered as 'Z:\directoryname', same as c# below
startdir = input("Enter Starting Path: ")
fileList = []
for(dirname, dirs, files) in os.walk(startdir, followlinks=True):
    for filename in files:
        thefile = os.path.join(dirname,filename)
        fileList.append(thefile)
printline = 'Total: ' + str(len(fileList))
print(printline)

C#很简单:

using System.IO;
...
string rootPath = @"Z:\directoryname";
string[] dirReturn = Directory.GetFiles(rootPath, "*", SearchOption.AllDirectories);

但是,Python返回数组中的653231个文件,而C#返回653271(相差40)。

我已经在C#数组中检查了重复项,但没有发现重复项。我已经比较了两个数组,并发现C#数组中Python数组中缺少的文件。 C#文件都有效。

我承认我似乎从C#代码中获得了有效的结果,也许应该很高兴,但我想了解为什么两个结果之间存在差异。

1 个答案:

答案 0 :(得分:1)

信誉不足以进行评论,但是使用os.walk时文件可能存在问题,这会阻止该方法实际读取文件。 From the documentation

“默认情况下,将忽略scandir()调用中的错误。如果指定了可选参数onerror,则它应该是一个函数;它将被一个参数(一个OSError实例)调用。它可以报告错误继续进行遍历,或引发异常以终止遍历。请注意,文件名可用作异常对象的filename属性。”

尝试使用类似这样的内容:

import os

def error_os_walk(exception):
    print("Error in file, python can't read")

startdir = input("Enter Starting Path: ")
fileList = []
for(dirname, dirs, files) in os.walk(startdir, followlinks=True, onerror=error_os_walk):
    for filename in files:
        thefile = os.path.join(dirname,filename)
        fileList.append(thefile)
printline = 'Total: ' + str(len(fileList))
print(printline)