2017-09-17 7 views
0

私は第2章の練習プロジェクトをPythonでAutomate the Boring Stuffの第9章で試していますが、 os.unlink(filename)コマンドを実行すると、ファイルは削除されず、そのまま残ります。誰もこれで助けることができますか?ここで私が使用したコードは次のとおりです。第9章Python Practiceプロジェクトで退屈なものを自動化する:不要なファイルを削除する

#! python3 
# deleteUnneeded.py - Searches and deletes files and folders 
# to free up space on a computer 


import os 

# Define a function 
def delUnneeded(folder): 
    folder = os.path.abspath(folder) 

    # Walk the folder tree with os.walk() 
    # and search for files and folders of more than 100MB using os.path.getsize() 
    for foldername, subfolders, filenames in os.walk(folder): 
     for filename in filenames: 
      fileSize = os.path.getsize(foldername + '\\' + filename) 
      if int(fileSize) < 100000000: 
       continue 
       os.unlink(filename) 
      print('Deleting ' + filename + '...') 

delUnneeded('C:\\Users\\DELL\\Desktop\\flash') 
print('Done') 
+3

あなたは 'os.unlink(filename)'の前に 'continue'ステートメントを持っています – JJAACCEeEKK

+0

また、ファイルを削除するためにフルパスを指定する必要があるかもしれません – PRMoureu

答えて

0

このコードは、問題である:

if int(fileSize) < 100000000: 
    continue 
    os.unlink(filename) 

あなたがos.unlinkを呼び出す直前に、あなたはループの次の繰り返しにジャンプcontinue文を、持っています。

あなたはos.unlinkがその条件の外にあることを意味すると思います。ちょうどそれをインデント解除:

if int(fileSize) < 100000000: 
    # skip small files 
    continue 
# Otherwise, delete the file 
os.unlink(filename) 

UPDATE上記のコメントで指摘したように、あなたはまた、完全なパスを構築する必要が

os.unlink(os.path.join(foldername, filename)) 

UPDATEを2

if ...: continueではなく、条件付きのロジックをsimに戻すことができますコードをplifyします。

import os 

def del_unneeded(folder): 
    # Walk the folder tree with os.walk() and search for files of more than 
    # 100MB using os.path.getsize() 
    for dirpath, dirnames, filenames in os.walk(folder): 
     for filename in filenames: 
      full_path = os.path.join(dirpath, filename) 
      if os.path.getsize(full_path) > 100000000: 
       print('Deleting {}...'.format(full_path)) 
       os.unlink(full_path) 

del_unneeded('C:\\Users\\DELL\\Desktop\\flash') 
print("Done") 

その他のマイナーな変更:ここにあなたのコードの私のクリーンアップバージョンです

  • 私はすでにintを返しos.path.getsize以来int(...)を落としました。
  • os.walkによって生成されたコンポーネントから形成されたフルパスを使用しました。
  • os.walkのドキュメントとPythonコーディングスタイル(camelCaseではなくsnake_case)に準拠するようにいくつかの変数の名前を変更しました。
  • 文字列連結ではなくstr.formatを使用しました。
関連する問題