2017-07-07 16 views
1

このエラーで他の質問を見ただけで重複していないようにしてください。フォルダのスキャン中にさまざまなエラーが発生する

私は、与えられたディレクトリをスキャンし、90日以上経過したすべてのサブディレクトリを削除する基本的なスキャナを作っています。ここでは、コードは次のようになります。ここでは

import os, sys 
import time 
import shutil 
from Tkinter import * 
import Tkinter, Tkconstants, tkFileDialog 



now = time.time() 
home1 = os.path.join(os.environ["HOMEPATH"], "Desktop") 
desktop = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop') 

root = Tk() 
root.withdraw() 
path = tkFileDialog.askdirectory(initialdir=desktop, title="Select folder to scan from: ") 
path = path.encode('utf-8') 

for x in os.walk(path): 
    for folders in x: 
     while os.stat(folders).st_mtime < now - 90 * 86400: 
      q = raw_input('Folder(s) found. NOTE: This will delete all directories or subdirectories in the folder. Do you want to remove?(y/n) ') 
      if str(q) == "y" or str(q) == "Y": 
       shutil.rmtree(path, ignore_errors=True) 
       print 'Successfully deleted folder(s)' 
      elif str(q) == "n" or str(q) == "N": 
       print 'Folders not deleted.' 
       sys.exit() 
     else: 
      print 'No folder(s) over 90 days' 

はフルトレースバックです:

Traceback (most recent call last): 
File "C:/Users/Bill/Desktop/limitScanner/scanner.py", line 20, in <module> 
while os.stat(folders).st_mtime < now - 90 * 86400: 
TypeError: coercing to Unicode: need string or buffer, list found 

編集:私は、デスクトップフォルダなど、複数のサブフォルダを持つフォルダに私のプログラムを使用する場合、それは私に次のようになりますエラー:WindowsError: [Error 2] The system cannot find the file specifiedと最初のフォルダの名前。

私はpython 2.7.13を使用しています。誰でも助けてくれますか?どんな助けも広く評価されています。

答えて

1

os.walkは、3タプル(dirpath, dirnames, filenames)を返します。あなたの現在のアプローチは、2番目の反復でディレクトリ名のリストを与える3タプルを反復しますdirnames

はしかし、あなたはdirnamesにのみ関心がある:私のために

for _, dirs, _ in os.walk(path): 
    for folder in dirs: 
     ... 
+0

このプログラムを実行すると、私のプログラムはフリーズしているようです。 – Bill

+0

@Billこれは 'while'ループで止まっています。代わりに* if *ブロックを使うべきです。 –

0

作品:

import os, sys 
import time 
import shutil 
from Tkinter import * 
import Tkinter, Tkconstants, tkFileDialog 

now = time.time() 
home1 = os.path.join(os.environ["HOMEPATH"], "Desktop") 
desktop = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop') 

root = Tk() 
root.withdraw() 
path = tkFileDialog.askdirectory(initialdir=desktop, title="Select folder to scan from: ") 
path = path.encode('utf-8') 

for _, x ,_ in os.walk(path): 
    for folders in x: 
     if os.stat(os.path.join(path,folders)).st_mtime < now - 90 * 86400: 
      q = raw_input('Folder(s) found. NOTE: This will delete all directories or subdirectories in the folder. Do you want to remove?(y/n) ') 
      if str(q) == "y" or str(q) == "Y": 
       shutil.rmtree(path, ignore_errors=True) 
       print 'Successfully deleted folder(s)' 
      elif str(q) == "n" or str(q) == "N": 
       print 'Folders not deleted.' 
       sys.exit() 
     else: 
      print 'No folder(s) over 90 days' 

私は、モーセが言ったように、os.walk(path)出力を適応ifwhileを変更し、(os.path.join(path,folders)を追加しましたしたがって、os.stat(...)は問題のフォルダを見つけることができます。

for _, x ,_ in os.walk(path): 
    for folders in x: 
     if os.stat(os.path.join(path,folders)).st_mtime < now - 90 * 86400: 
関連する問題