Python中的os.walk未能使用作为路径传递的命令行参数运行

1 投票
3 回答
568 浏览
提问于 2025-04-15 22:58

我需要找出系统中一个文件夹里的文件数量。

我用的是这个:

file_count = sum((len(f) for _, _, f in os.walk('path')))

当我把路径直接写成字符串时,这个方法运行得很好。但是当我用一个存储路径的变量时,type(file_count) 返回的是一个生成器对象,所以不能当作整数来使用。

怎么解决这个问题,为什么会这样呢?

好吧,我来告诉你我在做什么:

在终端的命令行里:

python mypyProg.py arg1 arg2 arg3

在我的程序 myProg.py 里:

arg1 = sys.argv[1]
file_count = sum((len(f) for _, _, f in os.walk(arg1)))

arg1 是以字符串的形式传入的

我检查了 repr(arg1) 和 type(arg1):

repr(arg1) '/home/kartik/Downloads/yahoo_dataset/tryfolder'
type(arg1) <type 'str'>

type(file_count) <type 'generator'>

错误信息:

NDCG = scipy.zeros((file_count,1),float)

    TypeError: an integer is required

我不知道,使用一些虚拟变量在 IDLE 的 Python IDE 里运行得很好。

3 个回答

0

因为我那个文件夹里只有文件,所以我用了这个方法:

file_count = len([f for f in os.listdir(loadpathTest) if os.path.isfile(os.path.join(loadpathTest, f))])

这个方法看起来有效。

@大家

谢谢你们的帮助。

0

sum 函数应该返回一个整数,就像我在 Python 的命令行中看到的一样...

>>> x = '/tmp'
>>> file_count = sum((len(f) for _, _, f in os.walk(x)))
>>> file_count
11
>>> type(file_count)
<type 'int'>
0

我猜你使用`walk`是因为你想知道目录及其子目录下的每一个文件。这里我不太明白发生了什么:

file_count = sum((len(f) for _, _, f in os.walk(path)))

假设`path`包含了,比如说,'src',这是我家目录下的一个文件夹,这样我就能得到这个文件夹及其子文件夹中的文件数量。那么你是什么意思呢?你确定你从命令行读取的路径是正确的吗?能不能多发一些信息?

撰写回答