2013-05-02 62 views
1

我正在寫一個python腳本來給我的文件和目錄的數量在給定的目錄,我有不同的結果建議對os.path中

對於下面的代碼我得到不正確的輸出

#! /usr/bin/python 
import os 
os.system('clear') 

x=raw_input('enter a path ') 
y=os.listdir(x) 
k=0 
m=0 
for a in y: 
     if os.path.isfile(a): 
       k=k+1 
     elif os.path.isdir(a): 
       m=m+1 



print ('files are %d' % (k)) 
print ('dirs are %d' % (m)) 

當我使用下面的代碼它的工作原理

#!/usr/local/bin/python 
import os 
os.system('clear') 
x=os.listdir('.') 
m=0 
n=0 
for a in x: 
     if os.path.isfile(a): 
       m=m+1 
     elif os.path.isdir(a): 
       n=n+1 

print ('%d files and %d directories' % (m,n)) 

所以,它不工作的第一種情況,當我通過命令行提供一個目錄名的輸入而在第二種情況下適用於某些原因。

感謝 賽義德


[[email protected]##### python]# python ford.py 
enter a path /var 
0 is the number of files in /var 
25 is the number of directories in /var 

[[email protected]#### python]# python os2.py 

enter a path /var 
/var files are 0 dirs are 1 

這裏os.py在我上面的問題,ford.py的第一個節目是唯一的文件名的第二

+0

從第1個程序和第2個程序得到的輸出是什麼。你在窗戶上嗎? – 2013-05-02 06:06:53

+1

你有不同的shebang行,如果你在相同版本的Python下運行這兩個腳本,你會得到相同的輸出嗎? – tripleee 2013-05-02 06:10:27

+0

您的第一個程序有效。在raw_input之後添加一行以打印x,以便我們可以看到您鍵入的內容。你是剛進入期間(好)還是期間引號(壞)? – tdelaney 2013-05-02 06:15:39

回答

0

listdir返回列表,沒有基本路徑。將這些文件名與x合併以獲得完整路徑。

#! /usr/bin/python 
import os 
os.system('clear') 

x=raw_input('enter a path ') 
y=os.listdir(x) 
k=0 
m=0 
for a in y: 
    p = os.path.join(x, a) # <-- here 
    if os.path.isfile(p): 
     k=k+1 
    elif os.path.isdir(p): 
     m=m+1 

print ('files are %d' % (k)) 
print ('dirs are %d' % (m)) 
+0

謝謝monoid,我現在明白了這個問題 – 2013-05-06 06:19:10