Я знаю os.listdir
, но насколько Я могу собрать, который получает все имена файлов в каталоге в память, а затем возвращает список. Я хочу получить способ получить имя файла, поработать с ним, а затем передать следующее, не считывая их все в память.
Есть ли способ сделать это? Меня беспокоит случай, когда имена файлов меняются, добавляются новые файлы и файлы удаляются с использованием такого метода. Некоторые итераторы не позволяют изменять коллекцию во время итерации, по сути, делая снимок состояния коллекции в начале и сравнивая это состояние при каждой операции перемещения
. Если есть итератор, способный выдавать имена файлов из пути, вызывает ли он ошибку, если есть изменения файловой системы (добавить, удалить, переименовывать файлы в повторяемом каталоге), которые изменяют коллекцию?
Потенциально может быть несколько случаев, которые могут вызвать отказ итератора, и все зависит от того, как итератор поддерживает состояние. Используя пример S.Lotts:
filea.txt
fileb.txt
filec.txt
Итератор возвращает filea.txt
. Во время обработки
, filea.txt
переименовывается в filey.txt
, а fileb.txt
переименовывается в filez.txt
. Когда итератор пытается получить следующий файл, если он использует имя файла filea.txt
, чтобы найти его текущую позицию, чтобы найти следующий файл, а filea.txt
- нет. там, что бы случилось? Возможно, ему не удастся восстановить свое положение в коллекции. Аналогично, если бы итератор получил fileb. txt
при выдаче filea.txt
он мог найти позицию fileb.txt
, выйти из строя и выдать ошибку.
Если бы итератор вместо этого мог каким-то образом поддерживать индекс dir.get_file (0)
, то это не повлияло бы на поддержание позиционного состояния, но некоторые файлы могли бы быть пропущены, поскольку их индексы могли быть перемещены в индекс "позади" итератора.
Это все, конечно, теоретически, поскольку, похоже, нет встроенного (python) способа перебора файлов в каталоге. Однако ниже есть несколько отличных ответов, которые решают проблему с помощью очередей и уведомлений.
Изменить:
ОС, вызывающая озабоченность, - Redhat. Мой вариант использования таков:
Процесс A непрерывно записывает файлы в место хранения. он мог найти позицию fileb.txt
, выйти из строя и выдать ошибку.
Если бы итератор вместо этого мог каким-то образом поддерживать индекс dir.get_file (0)
, то это не повлияло бы на поддержание позиционного состояния, но некоторые файлы могли бы быть пропущены, поскольку их индексы могли быть перемещены в индекс «позади» итератора.
Все это, конечно, теоретически, поскольку, похоже, нет встроенного (python) способа перебора файлов в каталоге. Однако ниже есть несколько отличных ответов, которые решают проблему с помощью очередей и уведомлений.
Изменить:
ОС, вызывающая озабоченность, - Redhat. Мой вариант использования таков:
Процесс A непрерывно записывает файлы в место хранения. он мог найти позицию fileb.txt
, выйти из строя и выдать ошибку.
Если бы итератор вместо этого мог каким-то образом поддерживать индекс dir.get_file (0)
, то это не повлияло бы на поддержание позиционного состояния, но некоторые файлы могли бы быть пропущены, поскольку их индексы могли быть перемещены в индекс "позади" итератора.
Это все, конечно, теоретически, поскольку, похоже, нет встроенного (python) способа перебора файлов в каталоге. Однако ниже есть несколько отличных ответов, которые решают проблему с помощью очередей и уведомлений.
Изменить:
ОС, вызывающая озабоченность, - Redhat. Мой вариант использования таков:
Процесс A непрерывно записывает файлы в место хранения.
Если бы итератор вместо этого мог каким-то образом поддерживать индекс dir.get_file (0)
, то это не повлияло бы на поддержание позиционного состояния, но некоторые файлы могли бы быть пропущены, поскольку их индексы могли быть перемещены в индекс «позади» итератора.
Все это, конечно, теоретически, поскольку, похоже, нет встроенного (python) способа перебора файлов в каталоге. Однако ниже есть несколько отличных ответов, которые решают проблему с помощью очередей и уведомлений.
Изменить:
ОС, вызывающая озабоченность, - Redhat. Мой вариант использования таков:
Процесс A непрерывно записывает файлы в место хранения.
Если бы итератор вместо этого мог каким-то образом поддерживать индекс dir.get_file (0)
, то это не повлияло бы на поддержание позиционного состояния, но некоторые файлы могли бы быть пропущены, так как их индексы могли быть перемещены в индекс "позади" итератора.
Это все, конечно, теоретически, поскольку, похоже, нет встроенного (python) способа перебора файлов в каталоге. Однако ниже есть несколько отличных ответов, которые решают проблему с помощью очередей и уведомлений.
Изменить:
ОС, вызывающая озабоченность, - Redhat. Мой вариант использования таков:
Процесс A непрерывно записывает файлы в место хранения. итератор.
Все это, конечно, теоретически, поскольку, похоже, не существует встроенного (python) способа итерации по файлам в каталоге. Однако ниже есть несколько отличных ответов, которые решают проблему с помощью очередей и уведомлений.
Изменить:
ОС, вызывающая озабоченность, - Redhat. Мой вариант использования таков:
Процесс A непрерывно записывает файлы в место хранения. итератор.
Все это, конечно, теоретически, поскольку, похоже, не существует встроенного (python) способа итерации по файлам в каталоге. Однако ниже есть несколько отличных ответов, которые решают проблему с помощью очередей и уведомлений.
Изменить:
ОС, вызывающая озабоченность, - Redhat. Мой вариант использования таков:
Процесс A непрерывно записывает файлы в место хранения. Процесс B (тот, который я пишу) будет перебирать эти файлы, выполняя некоторую обработку на основе имени файла и перемещая файлы в другое место.
Изменить:
Определение действительного:
Прилагательное 1. Хорошо обоснованный или оправданный, уместный.
(Извините, С.Лотт, я не смог устоять).
Я отредактировал упомянутый выше абзац.