Wypisz pierwsze 100 znaków w ciągu

108

Wydaje się, że w Pythonie znajduje się funkcja podciągowa.

Powiedzmy, że chcę wypisać pierwsze 100 znaków w ciągu, jak mogę to zrobić?

Chcę to również zrobić bezpiecznie, stwierdzając, że jeśli ciąg ma 50 znaków, nie powinien zawieść.

Blankman
źródło
2
Następstwem tego pytania jest: Dobry podkład do notacji plastra w Pythonie
Greg Hewgill
1
Co masz na myśli mówiąc o „postaciach”? Punkty kodowe, klastry grafemowe czy jednostki kodu? Cięcie na plasterki będzie liczyć jednostki kodu, co może nie dać pożądanego wyniku.
Filip

Odpowiedzi:

168
print my_string[0:100]
icktoofay
źródło
5
działa również dla strun krótszych niż 100, na przykład print 'foo'[:100](uwaga, len('foo')to jest 3, więc nawet jeśli foo[100]nie działa, działa)
Rodrigo Laguna
67

Z samouczka Pythona :

Zdegenerowane indeksy wycinków są obsługiwane z wdziękiem: indeks, który jest zbyt duży, jest zastępowany rozmiarem łańcucha , górna granica mniejsza niż dolna zwraca pusty ciąg.

Więc jest bezpieczny w użyciu x[:100].

czchen
źródło
27

Łatwo:

print mystring[:100]
Arkady
źródło
7

Odpowiadając na obawy Filipa (w komentarzach), krojenie działa również w przypadku ciągów znaków Unicode

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

Jeśli chcesz uruchomić powyższy kod jako skrypt, umieść tę linię na górze

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

Jeśli twój edytor nie zapisuje w utf-8, zastąp poprawne kodowanie

John La Rooy
źródło
2
Nie lekceważąc twojej odpowiedzi, ale jest tylko 24 litery po grecku ςi σsą to te same litery :-)
paxdiablo
4
@paxdiablo, doh! Skopiowałem je ze strony wikipedii. Na szczęście nie nazwałam greek_alphabetwtedy zmiennej :)
John La Rooy
4

Cięcie tablic jest wykonywane za pomocą [first:last+1].

Jedną sztuczką, której często używam, jest wskazanie dodatkowych informacji za pomocą elips. Tak więc, jeśli twoje pole ma sto znaków, użyłbym:

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

I tak, wiem, że ()w tym przypadku jest to zbędne dla %operatora formatującego, to po prostu mój styl.

paxdiablo
źródło
Myślę, że miało to dać do myślenia, ale w przypadku PO prawdopodobnie nie sugerowałbym tego robić. Rezultatem byłby ciąg, który musiałbyś sprawdzić pod kątem zawartości, aby dalej przyciąć lub coś w tym rodzaju. W tym przypadku wyobrażam sobie, że ktoś chciałby, aby ta liczba była zmienna, a wynik zawsze był poprawny, albo liczba została ustalona, ​​a obsługa albo dałaby coś znaczącego, albo błąd, albo zwracał wdzięcznie w przypadku niepowodzenia. Nie przychodzi mi do głowy wiele przypadków innych niż dostarczanie informacji czytelnych dla człowieka, w których chciałbym arbitralnie dodać tekst do ciągu.
3

Większość poprzednich przykładów zgłosi wyjątek w przypadku, gdy twój łańcuch nie jest wystarczająco długi.

Innym podejściem jest użycie 'yourstring'.ljust(100)[:100].strip().

To da ci pierwsze 100 znaków. Możesz otrzymać krótszy ciąg w przypadku, gdy ostatnie znaki są spacjami.

Julien Kieffer
źródło
Dzięki. Dziwne, dlaczego najlepsze odpowiedzi na stackoverflow nie są łatwo rozpoznawane i przegłosowane.
Basil Musa
3

Formatowanie ciągów znaków przy użyciu %jest świetnym sposobem radzenia sobie z tym. Oto kilka przykładów.

Kod formatujący jest '%s'konwertowany '12345'na ciąg, ale jest to już ciąg.

>>> '%s' % '12345'

'12345'

'%.3s' określa użycie tylko pierwszych trzech znaków.

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

'123'

'%.7s'mówi, żeby użyć pierwszych siedmiu znaków, ale jest ich tylko pięć. Nie ma problemu.

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

'12345'

'%7s' wykorzystuje do siedmiu znaków, wypełniając brakujące znaki spacjami po lewej stronie.

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

'  12345'

'%-7s' to ta sama rzecz, z wyjątkiem uzupełniania brakujących znaków po prawej stronie.

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

'12345  '

'%5.3' mówi, że użyj pierwszych trzech znaków, ale wypełnij go spacjami po lewej stronie, aby uzyskać łącznie pięć znaków.

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

'  123'

To samo z wyjątkiem wypełnienia po prawej stronie.

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

'123  '

Obsługuje również wiele argumentów!

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

'do u no 123 da 67 wae'

Jeśli potrzebujesz jeszcze większej elastyczności, str.format()jest również dostępny. Oto dokumentacja dla obu.

OrangeSherbet
źródło
0
[start:stop:step]

Więc jeśli chcesz wziąć tylko 100 pierwszych znaków, użyj your_string[0:100]lub your_string[:100] Jeśli chcesz wziąć tylko znak na parzystej pozycji, użyj your_string[::2] "Wartości domyślne" dla początku to 0, dla stop - długość ciągu, a dla kroku - 1. Więc jeśli nie podasz żadnego z nich i wstawisz ':', użyje wartości domyślnej.

Szymek G
źródło