python中的os.walk没有以cmd行参数的形式运行作为路径传递

时间:2010-05-21 08:37:19

标签: 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)并输入了(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 :(得分:0)

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

file_count = sum((os.walk(path)中_,_,f的len(f)))

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

答案 1 :(得分:0)

sum应该返回一个整数,就像我在python shell中一样...

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

答案 2 :(得分:0)

由于我只有该目录中的文件,我改为使用它:

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

这似乎有效。

@All 谢谢你的帮助。