2010-05-21 188 views
1

我需要找到系统文件夹中的文件数量。os.walk在python不运行,cmd行参数作为路径传递

这是我使用的:

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

这工作得很好,当我们指定路径用引号引起的字符串,但是当我输入保存路径,类型(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 

我不知道,它正在运行时,我只用一些虚拟变量进入它的空闲蟒蛇IDE罚款。

+2

请显示不起作用的代码,包括'repr(path_variable)'的打印以及设置它的代码。 – 2010-05-21 08:38:54

+2

'sum'应该总是返回一个整数,不是吗? – 2010-05-21 08:40:17

+0

你确定你没有在程序的某个地方覆盖“sum”这个名字吗?这是一个常见的错误。 – rbp 2010-08-10 19:50:39

回答

0

我假设你正在使用walk,因为你想知道目录及其子目录中的每个文件。我不明白发生了什么这里:

FILE_COUNT = SUM((LEN(F)为_,_,F在os.walk(路径)))

假设路径包含,比方说, 'SRC'这是我家目录中的一个目录我得到了dir及其后代中的文件数量,那么你是什么意思?你确定你正在从命令行读取正确的路径吗?你可以发布更多?

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

因为我在该目录中只有文件,我用这个来代替:

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

这似乎工作。

@全部 感谢您的帮助。