Ответ 1
Используйте search
вместо findall
:
number = re.search(r'\d+', filename).group()
В качестве альтернативы:
number = filter(str.isdigit, filename)
У меня есть файл, называемый файлом FILE-1.txt или FILE-340.txt. Я хочу иметь возможность получить номер из имени файла. Я обнаружил, что могу использовать
numbers = re.findall(r'\d+', '%s' %(filename))
чтобы получить список, содержащий номер, и использовать числа [0], чтобы получить номер как строку... Но если я знаю, что это всего лишь одно число, кажется, что это круговое и ненужное создание списка для его получения. Есть ли другой способ сделать это?
Изменить: Спасибо! Думаю, теперь у меня есть другой вопрос. Вместо того, чтобы получать строку, как получить целое число?
Используйте search
вместо findall
:
number = re.search(r'\d+', filename).group()
В качестве альтернативы:
number = filter(str.isdigit, filename)
Добавление в комментарий F.J, если вы хотите использовать int, вы можете использовать:
numbers = int(re.search(r'\d+', filename).group())
Если вы хотите, чтобы ваша программа была эффективной
используйте это:
num = filename.split("-")[1][:-4]
это будет работать только на примере, который вы показали
Другой способ просто для удовольствия:
In [1]: fn = 'file-340.txt'
In [2]: ''.join(x for x in fn if x.isdigit())
Out[2]: '340'
В ответ на ваш новый вопрос вы можете применить string
к int
:
>>>int('123')
123