2011-10-27 30 views
2

我正在構建一個可以工作的簡單函數(刪除文件)。但最後我想返回已被刪除的文件列表。如何顯示列表?

這是函數:

def deleteFiles(files): 
    # empty list 
    RemovedFiles = list() 

    for file in files: 
     # Delete the file 
     if os.remove(file): 
      RemovedFiles.append(file) 

    return RemovedFiles 

我運行此函數:

print deleteFiles([/home/xyz/xyz.zip]) 

這有效地刪除xyz.zip但返回一個空列表:[]。我在這裏做錯了什麼?

+1

也許一旦你做'os.remove(文件)'的文件不再存在,所以它不能被添加到列表中。嘗試在刪除文件之前獲取文件的名稱,並在刪除文件時將名稱添加到列表中。 – Oliver

+0

@Oliver - 胡說八道。文件名「file」不是文件系統上的文件。 –

回答

4

問題是,os.remove不返回任何東西。

但是,您可以tryexcept

for filename in filenames: 
    try: 
     # try to remove the file 
     os.remove(filename) 
    except OSError: 
     pass 
     # file not removed (maybe does not exist or is write-protected) 
     # you may report an error here 
    else: 
     # this executes only if os.remove was successful 
     RemovedFiles.append(filename) 
3

os.remove()返回無,所以你永遠不會追加到列表。

+0

將docs.python.org上的手冊打開以供參考總是很好的做法。我通常使用大型索引來搜索我使用的功能。或者我使用Python shell和'help'命令來檢查函數的文檔字符串。 – hochl

3

os.remove()沒有返回值,所以你if聲明有效

if None: 
    RemovedFiles.append(file) 

成爲在另一方面,它拋出一個異常,如果它不能刪除文件,所以下面應該工作:

try: 
    os.remove(file) 
except OSError: 
    pass 
else: 
    RemovedFiles.append(file) 
2

這是因爲os.remove()不返回任何東西。你的if條件評估爲false。

試試這個:

def deleteFiles(files): 
# empty list 
RemovedFiles = list() 

for file in files: 
    # Delete the file 
    try: 
     os.remove(file) 
     RemovedFiles.append(file) 
    except OSError: 
     continue 

return RemovedFiles 

這應該工作

+0

@TimPietzcker謝謝。固定 – unni