2010-05-21 100 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))]) 

這似乎工作。

@全部 感謝您的幫助。