2016-12-08 17 views
0

修正したファイルや新しいファイルをあるフォルダから別のフォルダに移動するためにスクリプトを作成しました。それを実行すると、エラーを表示せず正常に動作します。しかし、ファイルは移動していませんでした。なぜこうなった?ファイル名ではなく完全なパスのリストを返すos.listdir()述べメルポメネとしてPythonファイルは新しいディレクトリに移動しませんか?

import os 
from shutil import move 
from time import time 

def mins_since_mod(fname): 
    """Return time from last modification in minutes""" 
    return (time() - os.path.getmtime(fname))/60 

PARENT_DIR = 'C:\Users\Student\Desktop\FolderA' 
MOVE_DIR = 'C:\Users\Student\Desktop\FolderB' 

# Loop over files in PARENT_DIR 
for fname in os.listdir(PARENT_DIR): 
    # If the file is a directory and was modified in last 15 minutes 
    if os.path.isdir(fname) and mins_since_mod(fname) < 15: 
     move(fname, MOVE_DIR) # move it to a new location 
+0

? – Blorgbeard

+0

http://stackoverflow.com/questions/1623039/python-debugging-tips – jarmod

+0

'os.listdir'はフルパス名ではなくディレクトリエントリを返します。おもう。 – melpomene

答えて

0

これが役立つことがあります。

デバッグしようとしました
# Loop over files in PARENT_DIR 
for root, dirs, files in os.walk(PARENT_DIR): 
    for fname in dirs: 
     if mins_since_mod(fname) < 15: 
      move(os.path.join(root, fname), MOVE_DIR) # move it to a new location 
+0

これはトリックでした、ありがとう。 –

0

os.path.isdir()は無効なパスに対してFalseと評価されるため、move(...)は決して呼び出されません。

+0

これを修正するにはどうすればいいですか? –

+0

os.path.join(PARENT_DIR、fname)を使用してフルパスを取得します。 –

+0

また、Python 3.5の場合は 'os.scandir'を代わりに使うことができます。ここでは' DirEntry'オブジェクトを返します。これは最初のアクセス時にstat情報を空けるかキャッシュするか、 '.name'と'.path'属性があるので、' os.path.join'は必要ありません。 – ShadowRanger

関連する問題