Есть ли способ получить имя файла с помощью Python?

1

В каталоге Linux у меня есть несколько нумерованных файлов, таких как "day1" и "day2". Моя цель - написать код, который извлекает номер из файлов и добавить 1 в файл с наибольшим числом и создать новый файл. Например, если есть файлы: "day1", "day2" и "day3", код должен читать список файлов и добавлять "day4". Для этого, по крайней мере, мне нужно знать, как получить номера в имени файла.

  • 0
    Посмотрите в модуль os .
  • 0
    Итак, ваш вопрос в том, как получить имя файла или как проанализировать число внутри строки (например, имя файла)?
Теги:
file
python-3.x

3 ответа

1

Я бы использовал os.listdir чтобы получить все имена файлов, удалить префикс "день", преобразовать оставшиеся символы в целые числа и взять максимум. Оттуда это просто вопрос увеличения количества и добавления его к одному и тому же префиксу:

import os
max_file = max([int(f[3:]) for f in os.listdir('some_directory')])
new_file = 'day' + str(max_file + 1)
  • 0
    Ваш код нельзя использовать повторно, если требуется другой шаблон. (3 - это магическое число здесь.) Также каталог может содержать файлы, которые не соответствуют шаблону, но это скорее дополнительная информация.
0

Получите все файлы с модулем os/package (не используйте точную команду), а затем используйте regex (package) для получения чисел. Если вы не хотите смотреть в регулярное выражение, вы можете удалить буквы из своей строки с помощью replace() и преобразовать эту строку с помощью функции int().

0

Глобу было бы хорошо для этого. Это своего рода регулярное выражение, но специально для поиска файлов и проще. В основном вы просто используете * в качестве подстановочного знака, и вы также можете выбрать номера. Просто Google, что это такое. Он может быть довольно мощным и, например, является родным для оболочки bash.

for glob import glob
from pathlib import Path

pattern = "day"
last_file_number = max(map(lambda f: int(f[len(pattern):]), glob(pattern + "[0-9]*")))
Path("%s%d" % (pattern, last_file_number + 1)).touch()

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

Итак, небольшая оговорка: Glob не такой мощный, как regex. Здесь daydream например, не будет соответствовать, но day0dream все равно будет соответствовать. Вы также можете попробовать day*[0-9], но тогда daydream0 все равно будет соответствовать. Вы также можете использовать day[0-9] если знаете, что находитесь ниже двухзначных цифр. Таким образом, если ваш прецедент требует этого, вы можете использовать glob и фильтровать вниз с регулярным выражением.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню