@timka228

Поможете с задачкой на Python?

Пишу скрипт на Python 2.7. В определенной папке есть файлы пользователей, в названии файлов находятся трехзначные ID пользователей. Т.е. есть папка, где куча файлов с названиями "001.user", "002.user", "003.user", ..., "243.user".
Мне нужно скриптом создавать новых пользователей в эту папку. Хочу, чтобы ID подбирался автоматически, т.е. чтобы находилось незанятое число от 0 до 999 (желательно не рандомом, а по порядку).
Это через цикл for нужно делать? Можно ли сделать вот так: скрипт пробует создать файл "001", если произошла ошибка (такой файл уже есть), создается файл "002", снова ошибка - пробует "003", и тут ошибки нет - цикл завершается. Можете подсказать, как это сделать, пожалуйста))))

P.s. И да, я забыл сказать, что юзеры могут удаляться. Т.е. может быть пропуск по ID (005, 006, 007, 009, тут свободен id 008). И этот пропуск желательно заполнять.
  • Вопрос задан
  • 213 просмотров
Решения вопроса 1
@dmshar
Ну, не совсем, что-бы чистым циклом.

У вас есть папка. Изначально пустая. Ваш скрипт должен зайти в директорий, посмотреть, пустая она или нет.
Если директория пустая - генерируем файл 001. и заканчиваем работу.
Если директория не пустая начинаем просматривать файлы последовательно - 001,002.... пока не натыкаемся на последний элемент в этой последовательности. Потом генерируем файл с номером на единицу больший, чем последний встретившийся номер файла. Заканчиваем работу.

Если в будущем у вас некоторая произвольная папка будет уничтожена, скрипт сохранит свою работоспособность.

P.S. Дописанный вами фрагмент вопроса с поочередными попытками открытия файлов - самый неэффективный из всех, которые можно придумать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Нет, вы можете получить листинг каталога по маске glob.glob('*.user'), потом взять максимальное (в алфавитно-цифровом порядке) имя, отрезать у него расширение, превратить в целое число, увеличить на единицу, отформатировать нулями слева и создать новый файл.

last = max(glob.glob('*.user')+[''])
new = (last and int(last.split('.')[0]) or 0) + 1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы