Я хотел бы знать количество аргументов, необходимых для данной строки формата. Например, "%s is my name, and %s is my hair color"
будет иметь два аргумента. I может найти количество строк %
появляется в строке, но это не сработает, если я действительно хочу %
в моей строке, и это имело %%
, чтобы это обозначить. Это тоже не выглядит элегантно. Есть ли способ лучше?Количество аргументов для форматирования строк
ответ
Самый простой способ, которым я мог придумать это:
@PadraicCunningham: 'ValueError: неполный формат', для вашей более ранней версии. :) Надеюсь, OP только хочет проверить правильные строки формата. –
@PadraicCunningham: Это действительный _string_, но я не вижу, как это действительная строка _format_. Как я уже сказал, я получаю 'ValueError: неполный формат', когда я пытаюсь использовать'% s - это мое имя, а% s - это мой цвет волос %%% "' как строка формата (на Python 2.6.6). –
@ PM2Ring, не должно быть никакого форматирования в строке 'my_string = 100%', и возвращает число 1, вы говорите, что каждая строка должна иметь в нем форматирование? –
Не совсем эффективно - и не совсем серьезно :) ...
for n in xrange(10, -1, -1):
try:
s % (('',)*n)
except TypeError:
continue
print n
break
Хорошо, -1 для легкомыслия. Служит мне правильно. –
Если это какое-то утешение, я тоже думал о том, чтобы делать что-то подобное, но только для форматов, которые принимают строковые аргументы типа '% s' или'% r', а не числовые форматы, такие как '% d','% f' или '% G'. –
Хорошая точка - использование 0 скорее '' было бы лучше (числа принудительно привязаны к строкам, но не наоборот). –
Ну, вы могли бы использовать объект форматтера для этого, поскольку для этого нужна эта функция для собственных целей форматирования. Однако вы должны изменить своих владельцев.
import string
fmt = string.Formatter()
my_string = "Hello, {0:s} is my name and {1:s} is my hair color. I have 30% blue eyes"
parts = fmt.parse(my_string)
print list(parts)
Это дает:
[('Hello, ', '0', 's', None), (' is my name and ', '1', 's', None), (' is my hair color. I have 30% blue eyes', None, None, None)]
Теперь это вопрос фильтрации правые части из, а именно, где третий элемент в каждом кортеже не является None.
Все может быть изменено на однострочник так:
len([p for p in fmt.parse(my_string) if p[2] is not None]) # == 2
Несомненно, но это фактически не отвечает на вопрос OP, а конкретно о строковых строках в стиле «%» в старом стиле. –
Нигде он не указывает, что он ограничен стильным и нижним строковым форматированием. Он использует его только в этот момент, но нигде он не сказал, что не может его изменить. – avanwieringen
I * хотел бы увидеть подобное решение для форматирования в старом стиле. Правда, я не уточнил; и это * * вводит что-то, о чем я раньше не знал. – zondo
- 1. Недостаточно аргументов для строки форматирования Python-MySQL
- 2. Вопросы для форматирования строк
- 3. Цикл форматирования для строк
- 4. Раздел комментария формы форматирования для форматирования строк
- 5. Уменьшить количество строк кода, необходимых для форматирования ячеек?
- 6. mysql.connector.errors.ProgrammingError: неправильное количество аргументов во время форматирования строки
- 7. ProgrammingError: неправильное количество аргументов во время форматирования строки
- 8. Ruby: Неверное количество аргументов для подкласса меняет количество аргументов
- 9. TypeError: не хватает аргументов для форматирования строки
- 10. не достаточно аргументов для форматирования строки
- 11. Недостаточно аргументов для строки форматирования python
- 12. TypeError: Не хватает аргументов для форматирования строки
- 13. Источник для такого форматирования строк?
- 14. Неправильное количество аргументов для помощника
- 15. Неправильное количество аргументов для атрибута
- 16. Неверное количество аргументов для ПОРЯДКЕ
- 17. Неправильное количество аргументов для шаблона
- 18. Неверное количество аргументов, переданных
- 19. Количество форматирования в рельсах
- 20. Количество форматирования в питона
- 21. Многопоточность форматирования строк datagridview?
- 22. Unfolding Constant Количество аргументов
- 23. meta_search неправильное количество аргументов
- 24. Передача переменной Количество аргументов
- 25. MySQL Количество аргументов
- 26. string.format переменное количество аргументов
- 27. Недопустимое количество аргументов
- 28. Неопознанное неизвестное количество аргументов
- 29. неправильное количество аргументов clojure
- 30. Параметры форматирования строк
Использование 'str.format' или регулярное выражение является единственным способом –
Как я могу использовать' str.format' найти число нужны аргументы? – zondo
Я имею в виду, что вам нужно будет использовать str.format от get go, чтобы найти заполнители, нет встроенного метода, такого как Formatter.parse, с форматированием старого стиля вам нужно будет самостоятельно его проанализировать –