2016-05-19 55 views
0

的循環工作,但一旦我把如果它的語句只打印I am a dir讀取文件並獲得MD5哈希在Python

如果if語句不在那裏,我能夠打印dirpath, dirname, filename到控制檯

我想列出目錄中的所有文件名並獲得MD5總和。

from os import walk 
import hashlib 
import os 
path = "/home/Desktop/myfile" 

for (dirpath, dirname, filename) in walk(path): 

    if os.path.isdir(dirpath): 
     print("I am a dir") 
    if os.path.isfile(dirpath): 
     print(filename, hashlib.md5(open(filename, 'rb').read()).digest()) 

回答

1

您只是檢查dirpath。你所擁有的dirnamefilename實際上是dirpath下的目錄名和文件的集合。從python docs拍攝,並略作修改,作爲他們的榜樣刪除文件:

import os 
for root, dirs, files in os.walk(top): 
    for name in files: 
     print(os.path.join(root, name)) 
    for name in dirs: 
     print(os.path.join(root, name)) 

將打印的目錄和文件的列表top下,然後將遞歸下降的目錄中top下,打印的文件夾和目錄那裏。

1

大約從os.walk Python文檔:

https://docs.python.org/2/library/os.html

dirpath是一個字符串,該目錄路徑。 dirnames是 dirpath中子目錄的名稱(不包括'。'和'..')的列表。 文件名是 dirpath中非目錄文件的名稱列表。

隨着os.path.isfile(dirpath)要檢查dirpath是否是一個文件,這是從來沒有的情況。嘗試將代碼更改爲:

full_filename = os.path.join(dirpath, filename) 
if os.path.isfile(full_filename): 
    print(full_filename, hashlib.md5(open(full_filename, 'rb').read()).digest())