Есть несколько тонкостей, которые могут быть или не быть для вас проблемами, такие как обработка вкладок (например, если вы отображаете их как 8 пробелов, но обрабатываете их как 1 символ внутри), обработка различных разновидностей разрывов и не- разрыв пробелов или разрешение переноса переносов и т. д. Если что-то из этого желательно, вы можете взглянуть на модуль textwrap. например:
def truncate(text, max_size):
if len(text) <= max_size:
return text
return textwrap.wrap(text, max_size-3)[0] + "..."
Поведение по умолчанию для слов, превышающих max_size, заключается в их разрыве (что делает max_size жестким ограничением). Вы можете перейти к мягкому пределу, используемому некоторыми другими решениями здесь, передав break_long_words=False для wrap(), и в этом случае он вернет слово целиком. Если вы хотите такое поведение, измените последнюю строку на:
lines = textwrap.wrap(text, max_size-3, break_long_words=False)
return lines[0] + ("..." if len(lines)>1 else "")
Есть несколько других параметров, таких как expand_tabs, которые могут представлять интерес в зависимости от того, какое именно поведение вы хотите.
person
Brian
schedule
30.10.2008