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

108

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

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

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

Blankman
источник
2
Продолжение этого вопроса: Хороший учебник для нотации фрагментов Python
Грег Хьюгилл,
1
Что вы имеете в виду под «персонажами»? Кодовые точки, кластеры графем или кодовые единицы? Нарезка будет подсчитывать единицы кода, что может не дать желаемого результата.
Филипп

Ответы:

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

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

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

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

czchen
источник
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])

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

Paxdiablo
источник
Я предполагаю, что это было пищей для размышлений, но в случае с 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. Итак если вы не укажете один из них и поставите ':', он будет использовать его значение по умолчанию.

Szymek G
источник