Python中的os.walk未能使用作为路径传递的命令行参数运行
我需要找出系统中一个文件夹里的文件数量。
我用的是这个:
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',这是我家目录下的一个文件夹,这样我就能得到这个文件夹及其子文件夹中的文件数量。那么你是什么意思呢?你确定你从命令行读取的路径是正确的吗?能不能多发一些信息?