Jak obciąć ciąg znaków do 75 znaków w Pythonie?
Oto jak to się robi w JavaScript:
var data="saddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddsaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddsadddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
var info = (data.length > 75) ? data.substring[0,75] + '..' : data;
len(data) > 77
aby uwzględnić podwójne kropki (nie ma sensu obcinać tylko ostatniego znaku, aby zastąpić go kropką).Jeszcze krótszy:
źródło
Jeszcze bardziej zwięzłe:
Jeśli ma mniej niż 75 znaków, nie będzie żadnych zmian.
źródło
Jeśli używasz Python 3.4+, możesz użyć
textwrap.shorten
ze standardowej biblioteki:źródło
shorten()
obcina słowa , a nie pojedyncze znaki. Szukałem, ale nie ma sposobu na konfiguracjęshorten()
aniTextWrapper
instancji do przycinania pojedynczych znaków, a nie słów.W przypadku rozwiązania Django (o którym nie wspomniano w pytaniu):
Zajrzyj do kodu źródłowego Truncatora, aby docenić problem: https://github.com/django/django/blob/master/django/utils/text.py#L66
Obcięcie za pomocą Django: obcinanie Django HTML
źródło
Możesz użyć tego jednowierszowego:
źródło
[:n]
nazywa, żebym mógł to sprawdzić w dokumentacji?Z wyrażeniem regularnym:
Długie łańcuchy są obcinane:
Krótsze łańcuchy nigdy nie są obcinane:
W ten sposób możesz także „wyciąć” środkową część sznurka, co w niektórych przypadkach jest ładniejsze:
źródło
Ta metoda nie używa żadnej, jeśli:
data[:75] + bool(data[75:]) * '..'
źródło
źródło
75
) do zmiennej, aby uniknąć niespójności.limit = 75; info = data[:limit] + '..' * (len(data) > limit)
Jeszcze inne rozwiązanie. Dzięki,
True
aFalse
na końcu otrzymasz małą informację zwrotną na temat testu.źródło
To tylko w:
źródło
źródło
Nie można tak naprawdę „obciąć” łańcucha Pythona, tak jak można zrobić dynamicznie przydzielany ciąg C. Ciągi w Pythonie są niezmienne. To, co możesz zrobić, to pokroić ciąg, jak opisano w innych odpowiedziach, uzyskując nowy ciąg zawierający tylko znaki zdefiniowane przez przesunięcia plasterka i krok. W niektórych (niepraktycznych) przypadkach może to być trochę denerwujące, na przykład gdy wybierasz Python jako język wywiadu, a ankieter prosi cię o usunięcie zduplikowanych znaków z łańcucha w miejscu. Doh
źródło
źródło
Wyrażenie regularne nie jest potrzebne, ale chcesz użyć formatowania łańcucha zamiast konkatenacji łańcucha w zaakceptowanej odpowiedzi.
Jest to prawdopodobnie najbardziej kanoniczny, Pythoński sposób obcinania łańcucha
data
o długości 75 znaków.źródło
saddddddd...
zmienia się Twój ciąg111111...
:) Wiem, że to literówka kopiuj-wklej i zgadzam się z tobą w wyrażeniach regularnych.Oto funkcja, którą utworzyłem w ramach nowej klasy String ... Pozwala na dodanie sufiksu (jeśli łańcuch ma rozmiar po przycięciu i jest wystarczająco długi - chociaż nie musisz wymuszać rozmiaru bezwzględnego)
Byłem w trakcie zmiany kilku rzeczy, więc są pewne bezużyteczne koszty logiczne (jeśli na przykład skracam ...), gdzie nie jest to już konieczne, a na górze jest zwrot ...
Ale nadal jest to dobra funkcja do obcinania danych ...
źródło
źródło