2017-02-18 1094 views
2

Я пытаюсь написать сценарий Python, который работает в Windows. Файлы копируются в папку каждые несколько секунд, и я каждые 30 секунд проверяю эту папку на имена новых файлов, которые были скопированы в папку после последнего опроса.Получение времени копирования файла в папку (Python)

Я попытался использовать одну из функций os.path.getXtime(folder_path) и сравнить ее с меткой времени моего предыдущего опроса. Если значение getXtime больше, чем временная метка, я работаю над этими файлами.

Я попытался использовать функцию os.path.getctime(folder_path), но это не сработало, потому что файлы были созданы до того, как я написал скрипт. Я также пробовал os.path.getmtime(folder_path), но измененные времена обычно меньше, чем временная метка опроса.

И наконец, я попробовал os.path.getatime(folder_path), который работает в первый раз, когда файлы были скопированы. Проблема в том, что я также читаю файлы, когда они были в папке, поэтому время доступа постоянно обновляется, и я снова и снова повторяю одни и те же файлы.

Я не уверен, что это лучший способ или функция для этого.

ответ

1

У вас здесь есть XY problem. Вы хотите знать, когда файлы в папке меняются, вы попробовали homerolled решение, это не сработало, и теперь вы хотите исправить ваше homerolled решение.

Могу ли я предположить, что вместо ужасного хакера вы используете существующий пакет, предназначенный для мониторинга изменений файлов? Тот, который не является циклом опроса, но на самом деле получает уведомления об изменениях, когда они происходят? В то время как inotify - только для Linux, есть other options for Windows.

+1

Я бы также добавил, что опрос файлов, которые появляются в каталоге, является довольно плохим способом надежной передачи информации. Это кажется легким, и я полагаю, почему он так популярен. Но он ужасно подвержен ошибкам и буквально невозможно реализовать надежно без каких-либо внеполосных сообщений, чтобы гарантировать, что файлы, которые «появляются» в каталоге, завершены. Без этой внеполосной связи невозможно ** узнать, что новый файл в каталоге завершен. Никогда не задумывайтесь о том, какие файлы являются новыми. «Работает большую часть времени» - это не то, что я ** никогда не хочу доставить. –