2017-10-03 2 views
0

にos.walk使用しながら、これは、指定したサイズよりも大きいですファイルを検索するスクリプトです:ERRNO 2のPython

def size_scan(folder, size=100000000): 
    """Scan folder for files bigger than specified size 

    folder: abspath 
    size: size in bytes 
    """ 
    flag = False 

    for folder, subfolders, files in os.walk(folder): 
     # skip 'anaconda3' folder 
     if 'anaconda3' in folder: 
      continue 

     for file in files: 
      file_path = os.path.join(folder, file) 
      if os.path.getsize(file_path) > size: 
       print(file_path, ':', os.path.getsize(file_path)) 
       flag = True 

    if not flag: 
     print('There is nothing, Cleric') 

Linuxでのルートフォルダをスキャンしながら、私は、次のエラーメッセージが表示されます。

Traceback (most recent call last): 

    File "<ipython-input-123-d2865b8a190c>", line 1, in <module> 
    runfile('/home/ozramsay/Code/sizescan.py', wdir='/home/ozramsay/Code') 

    File "/home/ozramsay/anaconda3/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 880, in runfile 
    execfile(filename, namespace) 

    File "/home/ozramsay/anaconda3/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile 
    exec(compile(f.read(), filename, 'exec'), namespace) 

    File "/home/ozramsay/Code/sizescan.py", line 32, in <module> 
    size_scan('/') 

    File "/home/ozramsay/Code/sizescan.py", line 25, in size_scan 
    if os.path.getsize(file_path) > size: 

    File "/home/ozramsay/anaconda3/lib/python3.6/genericpath.py", line 50, in getsize 
    return os.stat(filename).st_size 

FileNotFoundError: [Errno 2] No such file or directory: '/run/udev/link.dvdrw' 

Pythonインタプリタが自分自身をスキャンすることができないので、私は検索から「anaconda3」フォルダをスキップしようとしました(上記のコードで#skip anacondaフォルダにマークされています)。ただし、エラーメッセージは同じままです。

誰でも説明していただけますか?

(質問のような種類がここでは許されないと、編集する必要がある場合は私に知らせてください。ありがとう)

+0

この機能を実行するフォルダを教えてください。 – zezollo

+0

'/ run/udev/link.dvdrw'はDVDドライブと関係があります(これは通常、'/run/udev/'もスキャンされていますか?おそらくシンボリックリンク?)。おそらく '' getsize'へのパスを渡す前に['os.path.isfile'](https://docs.python.org/3/library/os.path.html#os.path.isfile)を実行してください。 –

+0

zezollo、私Linux Mintのルートフォルダでこの関数を実行してください:size_scan( '/') –

答えて

1

ファイルのpythonはos.stat(filename).st_sizeがリンク切れであるとのサイズを取得しようとしています。壊れたリンクは、ターゲットを削除したリンクです。あなたのスクリプトでこれを修正するには、それがファイルであるか(推奨)、try/catch(推奨されていない)を使用するかを確認してください。ファイルが破損していないファイルであるかどうかを確認するには、os.path.isfile(file_path)を使用します。あなたのコードは次のようになります。それはサイズを取得する前に、ファイルは、それが存在することを確認するためにすべてのリンクを、次の、本当に存在する場合

def size_scan(folder, size=100000000): 
"""Scan folder for files bigger than specified size 

folder: abspath 
size: size in bytes 
""" 
flag = False 

for folder, subfolders, files in os.walk(folder): 
    # skip 'anaconda3' folder 
    if 'anaconda3' in folder: 
     continue 

    for file in files: 
     file_path = os.path.join(folder, file) 
     if os.path.isfile(file_path) and (os.path.getsize(file_path) > size): 
      print(file_path, ':', os.path.getsize(file_path)) 
      flag = True 

if not flag: 
    print('There is nothing, Cleric') 

だから、それはチェックします。 Related SO post

+0

はい、動作します、ありがとうございます。そして特別な質問を編集してくれてありがとう! –

+0

あなたは大歓迎です!助けてうれしい! – Steampunkery

関連する問題