Как определить количество файлов на диске с Python?

Ваше приложение должно поддерживать фоновые задачи, чтобы иметь возможность работать в фоновом режиме.

Я считаю, что на этот вопрос ответили несколько раз. Вот ссылка на документацию

Поскольку вы используете местоположение, я рекомендую вам использовать UIBackgroundModes в качестве местоположений. Но будьте уверены, что вы не разряжаете батарею пользователей .

Также использование фоновой выборки (UIBackgroundModes - fetch) и тихих уведомлений может быть отличным способом заставить ваше приложение работать через одинаковый промежуток времени.

Обновление

Для выполнения операций вы можете использовать автоматическое уведомление - см. Эту документацию Apple

Согласно документации - система будит ваше приложение в фоновом режиме и вызывает application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

обновление 2

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

5
задан Mike Boers 24 February 2009 в 17:18
поделиться

4 ответа

Вы могли использовать число от предыдущего rsync выполненный. Это быстро, портативно, и для 10**6 файлы и любая разумная стратегия резервного копирования это даст Вам 1% или лучшая точность.

2
ответ дан 13 December 2019 в 22:17
поделиться

Если пересечение дерева каталогов является опцией (было бы медленнее, чем запросы диска непосредственно):

import os

dirs = 0
files = 0

for r, d, f in os.walk('/path/to/drive'):
  dirs += len(d)
  files += len(f)
1
ответ дан 13 December 2019 в 22:17
поделиться

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

Я не верил этому, но это, кажется, работает над Linux:

os.statvfs('/').f_files - os.statvfs('/').f_ffree

Это вычисляет общее количество блоков файла минус свободные блоки файла. Это, кажется, показывает результаты для целой файловой системы даже при указании на него на другой каталог. os.statvfs реализован на Unix только.

Хорошо, я признаю, я на самом деле не позволял 'медленному, корректному' пути закончиться прежде поражающийся быстрому методу. Всего несколько недостатков: Я подозреваю .f_files также считал бы каталоги, и результат является, вероятно, полностью неправильным. Это могло бы работать, чтобы считать файлы медленным путем, однажды, и скорректировать результат 'быстрого' пути?

Портативный путь:

import os
files = sum(len(filenames) for path, dirnames, filenames in os.walk("/"))

os.walk возвращает с 3 кортежами (dirpath, dirnames, имена файлов) для каждого каталога в файловой системе, запускающейся в данном пути. Это, вероятно, займет много времени для "/", но Вы уже знали это.

Простой способ:

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

import random
num_files = random.randint(69000, 4000000)

Сообщите нам, работает ли какой-либо из этих методов на Вас.

См. также, Как я препятствую тому, чтобы os.walk Python шел через точки монтирования?

7
ответ дан 13 December 2019 в 22:17
поделиться

Править: Центр внимания не отслеживает каждый файл, таким образом, его метаданные не будут достаточны.

0
ответ дан 13 December 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: