Если объект списка содержит что-то, удалите из списка - PullRequest
0 голосов
/ 21 июля 2011

У меня есть скрипт на python, который проверяет определенную папку на наличие новых файлов, а затем копирует новые файлы в другой каталог.Файлы находятся в таком формате 1234.txt и 1234_status.txt.Он должен только переместить 1234.txt и оставить 1234_status.txt без присмотра.

Вот небольшой кусочек моего кода на python

    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]

Моя идея состоит в том, что после того, как он заполняется, добавляется, то онпроверяет его на наличие значений, имеющих статус, и извлекает его из массива.Не могу найти способ сделать это, хотя: /

Заранее спасибо, Танель-Нильс

Ответы [ 3 ]

2 голосов
/ 21 июля 2011

Если я правильно понимаю вашу проблему:

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, чтобы избежать бесполезных проверок.

1 голос
/ 22 июля 2011
files_in_directory = [filename for filename in os.listdir(directory_name)]
files_to_move = filter(lambda filename: '_status' not in filename, files_in_directory)
1 голос
/ 21 июля 2011
added = [f for f in after if not f in before and '_status' not in f]

Однако я рекомендую воздерживаться от длинных однострочных операторов, поскольку они делают код практически невозможным для чтения

...