2011-07-21 9 views
0

特定のフォルダに新しいファイルがあるかどうかを確認して新しいファイルを別のディレクトリにコピーするpythonスクリプトがあります。ファイルは1234.txtと1234_status.txtという形式です。 1234.txtのみ移動し、1234_status.txtは無人のままにしてください。リストオブジェクトにリストから何かが削除されている場合

ここに私のコードの小さな作品が

while 1: 
#retrieves listdir 
     after = dict([(f, None) for f in os.listdir (path_to_watch)]) 
#if after has more files than before, then it adds the new files to an array "added" 
     added = [f for f in after if not f in before] 

pythonでだ私の考えでは、それが追加塗りつぶした後、それはそれでステータスを持つ値のためにそれをチェックし、配列からそれをポップということです。このかかわらを行うための方法を見つけることができませんでした:/

事前のおかげで、 Tanel-ニルス

+1

[ウォッチ](http://packages.python.orgを見てくださいを読むためのコードはほとんど不可能にするように私は、しかし、長い1行の文を控えることをお勧めします/ watchdog /) –

答えて

1
added = [f for f in after if not f in before and '_status' not in f] 

彼らは

2

を私が正しくあなたの問題を理解していれば:

while 1: 
    for f in os.listdir(path_to_watch): 
     if 'status' not in f: # or a more appropriate condition 
      move_file_to_another_directory(f) 
    # wait 

またはpyinotifyをチェック避けるために、Linuxを使用している場合役に立たない小切手。

+0

彼の両方の条件を満たすためには、 '前にいなかった場合と'状態が 'でない場合はどうですか? – agf

+0

@agf - 前には何ですか?私が実際にすべての関連ファイルを私が遭遇するたびに別のディレクトリに移動すると、次の 'os.listdir'呼び出しでそれらを取得しません。または私は何かを逃していますか? – eumiro

+0

彼は最初にディレクトリ内のファイルのリストを取ってから、そのディレクトリを見て、自分の質問が正しいと分かっていれば、__new files__を別のディレクトリに移動したいと思っています。 – agf

1
files_in_directory = [filename for filename in os.listdir(directory_name)] 
files_to_move = filter(lambda filename: '_status' not in filename, files_in_directory) 
関連する問題