Уведомления

Группа в Telegram: @pythonsu

#1 Май 8, 2015 13:06:25

yes1n
Зарегистрирован: 2015-05-08
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Написание программы, которая будет работать постоянно

Дано: текстовые файлы создаются в какой-либо папке, надо их парсить, обрабатывать и сохранять в другой файл. После выполнения исходные файлы можно удалить.
Нужно: понять как написать программу, которая будет делать это постоянно, т.е. чтобы при появлении нового файла в папке, происходил его парсинг.
Заранее спасибо.

Офлайн

#2 Май 8, 2015 14:05:24

giveback
Зарегистрирован: 2015-05-03
Сообщения: 36
Репутация: +  6  -
Профиль   Отправить e-mail  

Написание программы, которая будет работать постоянно

Можно сделать так: в бесконечном цикле через определённые промежутки времени проверять содержимое папки на наличие файлов, и, если файлы есть, выполнять над ними нужные операции и удалять.

Примерно так:

import os
import time
folder_path = 'c:\\some_folder' # путь к папке с файлами
while True:
    for filename in (f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path,f))):
        file_path = os.path.join(folder_path, filename)
        process_file(file_path) # фунция по обработке и удалении файла
    time.sleep(10) # ждём 10 секунд и всё по новой

Отредактировано giveback (Май 8, 2015 14:16:56)

Офлайн

#3 Май 8, 2015 20:50:21

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Написание программы, которая будет работать постоянно

Офлайн

#4 Май 9, 2015 13:20:31

yes1n
Зарегистрирован: 2015-05-08
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Написание программы, которая будет работать постоянно

giveback
Можно сделать так: в бесконечном цикле через определённые промежутки времени проверять содержимое папки на наличие файлов, и, если файлы есть, выполнять над ними нужные операции и удалять.Примерно так:
я тоже об этом подумал с самого начала. Интересно сколько ресурсов компьютера это будет требовать.
doza_and
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365261(v=vs.85).aspx
Странно, что на форуме пайтона дали ссылку на C++, но я так понимаю не просто так: видимо так сделать рациональней. Придется C++ еще изучать…

Отредактировано yes1n (Май 9, 2015 13:22:26)

Офлайн

#5 Май 9, 2015 14:40:24

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

Написание программы, которая будет работать постоянно

Офлайн

#6 Май 9, 2015 17:53:50

yes1n
Зарегистрирован: 2015-05-08
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Написание программы, которая будет работать постоянно

ayb
https://github.com/gorakhargosh/watchdog
Если не сложно, подскажи как пользоваться этой библиотекой. Как установить я знаю, а где прочитать какие команды что выполняют?

Офлайн

#7 Май 10, 2015 09:25:20

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

Написание программы, которая будет работать постоянно

На гитхабе есть ссылка на документацию - https://pythonhosted.org/watchdog/

Отредактировано ayb (Май 10, 2015 09:26:02)

Офлайн

#8 Май 11, 2015 15:40:27

yes1n
Зарегистрирован: 2015-05-08
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Написание программы, которая будет работать постоянно

ayb
На гитхабе есть ссылка на документацию - https://pythonhosted.org/watchdog/
Спасибо, попробовал, хорошая либа.

Получилось это:
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class Handler(FileSystemEventHandler):
    def on_created(self, event):
        print (event)
    def on_deleted(self, event):
        print (event)
    def on_moved(self, event):
        print (event)
observer = Observer()
observer.schedule(Handler(), path='d:\\test', recursive=True)
observer.start()
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    observer.stop()
observer.join()
def main():
    pass
if __name__ == '__main__':
    main()

В итоге выводятся все изменения, происходящие в папке. Подскажите в каком месте надо писать код, чтобы работать с данными из созданных файлов.

Офлайн

#9 Май 11, 2015 15:58:46

giveback
Зарегистрирован: 2015-05-03
Сообщения: 36
Репутация: +  6  -
Профиль   Отправить e-mail  

Написание программы, которая будет работать постоянно

в методе on_created. судя по названию именно он вызывается тогда, когда создаётся новый файл в директории.
а в event.src_path можно взять путь к созданному файлу

Отредактировано giveback (Май 11, 2015 16:08:27)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version