Вывести первые 100 символов в строке


108

Может показаться, что можно найти функцию подстроки в python.

Скажем, я хочу вывести первые 100 символов в строке, как я могу это сделать?

Я также хочу сделать это безопасно, потому что если строка составляет 50 символов, она не должна завершиться неудачей.



1
Что вы имеете в виду под «персонажами»? Кодовые точки, кластеры графем или кодовые единицы? Нарезка будет подсчитывать единицы кода, что может не дать желаемого результата.
Филипп

Ответы:


168
print my_string[0:100]

5
он также работает, например, для строк короче 100 print 'foo'[:100](обратите внимание, что len('foo')это 3, поэтому, даже если foo[100]не работает, он работает)
Родриго Лагуна

67

Из учебника python :

Вырожденные индексы срезов обрабатываются изящно: слишком большой индекс заменяется размером строки , верхняя граница меньше нижней границы возвращает пустую строку.

Так что безопасно использовать x[:100].



7

Чтобы ответить на беспокойство Филиппа (в комментариях), нарезка работает и для строк Unicode.

>>> greek=u"αβγδεζηθικλμνξοπρςστυφχψω"
>>> print len(greek)
25
>>> print greek[:10]
αβγδεζηθικ

Если вы хотите запустить приведенный выше код как скрипт, поместите эту строку вверху

# -*- coding: utf-8 -*-

Если ваш редактор не сохраняет в utf-8, замените правильную кодировку


2
Не умаляя вашего ответа, но там всего 24 буквы на греческом, ςи σэто одна и та же буква :-)
paxdiablo

4
@paxdiablo, да! Я скопировал их со страницы википедии. К счастью, я тогда не назвал переменную greek_alphabet:)
Джон Ла Рой,

4

Нарезка массивов выполняется с помощью [first:last+1].

Один трюк, который я часто использую, - это указывать дополнительную информацию с помощью эллипсов. Итак, если ваше поле составляет сто символов, я бы использовал:

if len(s) <= 100:
    print s
else:
    print "%s..."%(s[:97])

И да, я знаю, ()что в данном случае для %оператора форматирования это лишнее , это просто мой стиль.


Я предполагаю, что это было пищей для размышлений, но в случае с OP я бы, вероятно, не предлагал этого делать. Результатом будет строка, которую вам нужно будет проверить на предмет содержимого для дальнейшей обрезки или чего-то подобного. В этом случае я мог бы предположить, что можно было бы либо желать, чтобы это число было переменным, а результат всегда был правильным, либо число, которое было исправлено, и обработка либо производила что-то значимое, либо ошибка, либо изящно возвращалась в случае сбоя. Я не могу придумать многих случаев, кроме доставки удобочитаемой информации, когда я бы хотел добавить текст в строку произвольно.

3

Большинство предыдущих примеров вызовут исключение, если ваша строка недостаточно длинна.

Другой подход - использовать 'yourstring'.ljust(100)[:100].strip().

Это даст вам первые 100 символов. Вы можете получить более короткую строку, если последние символы вашей строки являются пробелами.


Спасибо. Странно, почему лучшие ответы на stackoverflow не распознаются и не получают голосов.
Василий Муса,

3

Использование форматирования строк %- отличный способ справиться с этим. Вот несколько примеров.

Код форматирования '%s'преобразуется '12345'в строку, но это уже строка.

>>> '%s' % '12345'

'12345'

'%.3s' указывает использовать только первые три символа.

>>> '%.3s' % '12345'

'123'

'%.7s'говорит, что нужно использовать первые семь символов, но их всего пять. Нет проблем.

>>> '%.7s' % '12345'

'12345'

'%7s' использует до семи символов, заполняя пропущенные символы пробелами слева.

>>> '%7s' % '12345'

'  12345'

'%-7s' то же самое, кроме заполнения пропущенных символов справа.

>>> '%-7s' % '12345'

'12345  '

'%5.3' говорит, что используйте первые три символа, но заполните его пробелами слева, чтобы всего пять символов.

>>> '%5.3s' % '12345'

'  123'

То же самое, кроме заливки справа.

>>> '%-5.3s' % '12345'

'123  '

Может обрабатывать несколько аргументов!

>>> 'do u no %-4.3sda%3.2s wae' % ('12345', 6789)

'do u no 123 da 67 wae'

Если вам нужна еще большая гибкость, str.format()тоже доступно. Вот документация для обоих.


0
[start:stop:step]

Итак, если вы хотите взять только 100 первых символов, используйте your_string[0:100]или. your_string[:100] Если вы хотите взять только символ в четной позиции, используйте your_string[::2] «Значения по умолчанию» для начала - 0, для остановки - длина строки и для шага - 1. Итак если вы не укажете один из них и поставите ':', он будет использовать его значение по умолчанию.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.