Szukaj…


Składnia

  • str.capitalize () -> str
  • str.casefold () -> str [tylko dla Python> 3.3]
  • str. centrum (szerokość [, fillchar]) -> str
  • str.count (sub [, start [, end]]) -> int
  • str.decode (encoding = "utf-8" [, błędy]) -> Unicode [tylko w Python 2.x]
  • str.encode (kodowanie = „utf-8”, błędy = „ścisłe”) -> bajty
  • str.endswith (sufiks [, start [, koniec]]) -> bool
  • str.expandtabs (tabsize = 8) -> str
  • str.find (sub [, start [, end]]) -> int
  • str.format (* args, ** kwargs) -> str
  • str.format_map (mapowanie) -> str
  • str.index (sub [, start [, end]]) -> int
  • str. isalnum () -> bool
  • str. isalpha () -> bool
  • str.isdecimal () -> bool
  • str.isdigit () -> bool
  • str.isidentifier () -> bool
  • str. islower () -> bool
  • str.isnumeric () -> bool
  • str.isprintable () -> bool
  • str.isspace () -> bool
  • str.istitle () -> bool
  • str.isupper () -> bool
  • str.join (iterable) -> str
  • str. just (szerokość [, fillchar]) -> str
  • str. dolna () -> str
  • str.lstrip ([chars]) -> str
  • static str.maketrans (x [, y [, z]])
  • str. partycja (sep) -> (głowa, sep, ogon)
  • str .replace (old, new [, count]) -> str
  • str.rfind (sub [, start [, end]]) -> int
  • str.rindex (sub [, start [, end]]) -> int
  • str. rjust (szerokość [, fillchar]) -> str
  • str. partycja (sep) -> (głowa, sep, ogon)
  • str.rsplit (sep = None, maxsplit = -1) -> lista ciągów
  • str.rstrip ([chars]) -> str
  • str.split (sep = None, maxsplit = -1) -> lista ciągów
  • str.splitlines ([keepends]) -> lista ciągów
  • str. startartswith (prefix [, start [, end]]) -> book
  • str.strip ([chars]) -> str
  • str.swapcase () -> str
  • str.title () -> str
  • str.translate (table) -> str
  • str.upper () -> str
  • str. z wypełnienie (szerokość) -> str

Uwagi

Obiekty łańcuchowe są niezmienne, co oznacza, że nie można ich modyfikować w sposób, w jaki może to zrobić lista. Z tego powodu metody wbudowanego typu str zawsze zwracają nowy obiekt str , który zawiera wynik wywołania metody.

Zmiana wielkich liter ciągu

Typ łańcucha Pythona zapewnia wiele funkcji, które działają na wielkie litery. Obejmują one :

  • str.casefold
  • str.upper
  • str.lower
  • str.capitalize
  • str.title
  • str.swapcase

W przypadku łańcuchów Unicode (domyślnie w Pythonie 3) operacje te nie są odwzorowaniami 1: 1 ani odwracalnymi. Większość tych operacji jest przeznaczona raczej do celów wyświetlania niż do normalizacji.


Python 3.x 3.3

str.casefold()

str.casefold tworzy ciąg małych liter, który jest odpowiedni do porównań bez rozróżniania wielkości liter. Jest to bardziej agresywne niż str.lower i może modyfikować ciągi, które są już str.lower małymi literami lub powodować str.lower ciągów i nie jest przeznaczone do wyświetlania.

"XßΣ".casefold()
# 'xssσ'

"XßΣ".lower()
# 'xßς'

Transformacje, które zachodzą w trakcie składania folderów, są definiowane przez konsorcjum Unicode w pliku CaseFolding.txt na ich stronie internetowej.


str.upper()

str.upper pobiera każdy znak w ciągu i konwertuje go na ekwiwalent wielkich liter, na przykład:

"This is a 'string'.".upper()
# "THIS IS A 'STRING'."

str.lower()

str.lower robi str.lower przeciwnego; pobiera każdy znak w ciągu i konwertuje go do swojego małego odpowiednika:

"This IS a 'string'.".lower()
# "this is a 'string'."

str.capitalize()

str.capitalize zwraca wielką str.capitalize łańcucha, co oznacza, że pierwszy znak ma wielkie litery, a pozostałe małe:

"this Is A 'String'.".capitalize() # Capitalizes the first character and lowercases all others
# "This is a 'string'."

str.title()

str.title zwraca tytułową wersję łańcucha, tzn. każda litera na początku słowa jest str.title wielkimi literami, a wszystkie inne są pisane małymi literami:

"this Is a 'String'".title()
# "This Is A 'String'"

str.swapcase()

str.swapcase zwraca nowy obiekt łańcucha, w którym wszystkie małe litery są zamieniane na wielkie litery, a wszystkie wielkie litery na małe:

"this iS A STRiNG".swapcase() #Swaps case of each character
# "THIS Is a strIng"

Zastosowanie jako metody klasy str

Warto zauważyć, że metody te można wywoływać na obiektach łańcuchowych (jak pokazano powyżej) lub jako metoda klasowa klasy str (z wyraźnym wywołaniem str.upper itp.)

str.upper("This is a 'string'")
# "THIS IS A 'STRING'"

Jest to najbardziej przydatne, gdy stosuje się jedną z tych metod do wielu ciągów naraz, powiedzmy, funkcji map .

map(str.upper,["These","are","some","'strings'"])
# ['THESE', 'ARE', 'SOME', "'STRINGS'"]

Podziel ciąg oparty na separatorze na listę ciągów

str.split(sep=None, maxsplit=-1)

str.split pobiera ciąg znaków i zwraca listę podciągów oryginalnego ciągu. Zachowanie różni się w zależności od tego, czy argument sep jest podany, czy pominięty.

Jeśli nie podano sep lub None , to dzielenie odbywa się wszędzie tam, gdzie jest spacja. Jednak początkowe i końcowe białe znaki są ignorowane, a wiele kolejnych znaków białych jest traktowanych tak samo jak pojedynczy znak białych znaków:

>>> "This is a sentence.".split()
['This', 'is', 'a', 'sentence.']

>>> " This is    a sentence.  ".split()
['This', 'is', 'a', 'sentence.']

>>> "            ".split()
[]

Za pomocą parametru sep można zdefiniować ciąg separatora. Oryginalny ciąg jest dzielony tam, gdzie występuje ciąg separatora, a sam separator jest odrzucany. Wiele kolejnych separatorów nie jest traktowanych tak samo jak pojedyncze wystąpienie, ale powoduje tworzenie pustych ciągów.

>>> "This is a sentence.".split(' ')
['This', 'is', 'a', 'sentence.']

>>> "Earth,Stars,Sun,Moon".split(',')
['Earth', 'Stars', 'Sun', 'Moon']

>>> " This is    a sentence.  ".split(' ')
['', 'This', 'is', '', '', '', 'a', 'sentence.', '', '']

>>> "This is a sentence.".split('e')
['This is a s', 'nt', 'nc', '.']

>>> "This is a sentence.".split('en')
['This is a s', 't', 'ce.']

Domyślnie jest to podział przy każdym wystąpieniu ogranicznika, jednak parametr maxsplit ogranicza liczbę występujących maxsplit . Domyślna wartość -1 oznacza brak limitu:

>>> "This is a sentence.".split('e', maxsplit=0)
['This is a sentence.']

>>> "This is a sentence.".split('e', maxsplit=1)
['This is a s', 'ntence.']

>>> "This is a sentence.".split('e', maxsplit=2)
['This is a s', 'nt', 'nce.']

>>> "This is a sentence.".split('e', maxsplit=-1)
['This is a s', 'nt', 'nc', '.']

str.rsplit(sep=None, maxsplit=-1)

str.rsplit („prawy podział”) różni się od str.split („lewy podział”), gdy określono maxsplit . Podział rozpoczyna się na końcu ciągu, a nie na początku:

>>> "This is a sentence.".rsplit('e', maxsplit=1)
['This is a sentenc', '.']

>>> "This is a sentence.".rsplit('e', maxsplit=2)
['This is a sent', 'nc', '.']

Uwaga : Python określa maksymalną liczbę wykonanych podziałów , podczas gdy większość innych języków programowania określa maksymalną liczbę utworzonych podciągów . Może to powodować zamieszanie podczas przenoszenia lub porównywania kodu.

Zamień wszystkie wystąpienia jednego podłańcucha na inny podłańcuch

Typ str Pythona ma również metodę zastępowania wystąpień jednego podciągu innym podciąganem w danym ciągu. W bardziej wymagających przypadkach można użyć re.sub .


str.replace(old, new[, count]) :

str.replace pobiera dwa argumenty old i new zawierający old ciąg podrzędny, który ma zostać zastąpiony new ciągiem podrzędnym. Opcjonalna count argumentów określa liczbę zamienników, które należy wykonać:

Na przykład, aby zastąpić 'foo' str.replace 'spam' w następującym ciągu, możemy wywołać str.replace ze old = 'foo' i new = 'spam' :

>>> "Make sure to foo your sentence.".replace('foo', 'spam')
"Make sure to spam your sentence."

Jeśli podany ciąg zawiera wiele przykładów pasujących do old argumentu, wszystkie wystąpienia zostaną zastąpione wartością podaną w new :

>>> "It can foo multiple examples of foo if you want.".replace('foo', 'spam')
"It can spam multiple examples of spam if you want."

chyba że oczywiście podamy wartość do count . W takim przypadku count wystąpień zostanie zastąpiona:

>>> """It can foo multiple examples of foo if you want, \
... or you can limit the foo with the third argument.""".replace('foo', 'spam', 1)
'It can spam multiple examples of foo if you want, or you can limit the foo with the third argument.'

str.format i f-string: Formatuj wartości w łańcuch

Python zapewnia interpolację i formatowanie ciągów za pomocą funkcji str.format , wprowadzonej w wersji 2.6 i f-stringów wprowadzonej w wersji 3.6.

Biorąc pod uwagę następujące zmienne:

i = 10
f = 1.5
s = "foo"
l = ['a', 1, 2]
d = {'a': 1, 2: 'foo'}

Wszystkie poniższe oświadczenia są równoważne

"10 1.5 foo ['a', 1, 2] {'a': 1, 2: 'foo'}"
>>> "{} {} {} {} {}".format(i, f, s, l, d)

>>> str.format("{} {} {} {} {}", i, f, s, l, d)

>>> "{0} {1} {2} {3} {4}".format(i, f, s, l, d)

>>> "{0:d} {1:0.1f} {2} {3!r} {4!r}".format(i, f, s, l, d)

>>> "{i:d} {f:0.1f} {s} {l!r} {d!r}".format(i=i, f=f, s=s, l=l, d=d)
>>> f"{i} {f} {s} {l} {d}"

>>> f"{i:d} {f:0.1f} {s} {l!r} {d!r}"

W celach informacyjnych Python obsługuje także kwalifikatory w stylu C do formatowania ciągów. Poniższe przykłady są równoważne z powyższymi, ale preferowane są wersje str.format ze względu na zalety w zakresie elastyczności, spójności zapisu i rozszerzalności:

"%d %0.1f %s %r %r" % (i, f, s, l, d)

"%(i)d %(f)0.1f %(s)s %(l)r %(d)r" % dict(i=i, f=f, s=s, l=l, d=d)

Nawiasy klamrowe używane do interpolacji w str.format można również ponumerować, aby ograniczyć powielanie podczas formatowania ciągów. Na przykład następujące są równoważne:

"I am from Australia. I love cupcakes from Australia!"
>>> "I am from {}. I love cupcakes from {}!".format("Australia", "Australia")

>>> "I am from {0}. I love cupcakes from {0}!".format("Australia")

Chociaż oficjalna dokumentacja Pythona jest, jak zwykle, dość dokładna, pyformat.info ma świetny zestaw przykładów ze szczegółowymi objaśnieniami.

Dodatkowo znaki { i } można uciec za pomocą podwójnych nawiasów:

"{'a': 5, 'b': 6}"
>>> "{{'{}': {}, '{}': {}}}".format("a", 5, "b", 6)

>>> f"{{'{'a'}': {5}, '{'b'}': {6}}"

Aby uzyskać dodatkowe informacje, zobacz Formatowanie ciągów . str.format() został zaproponowany w PEP 3101, a f-string w PEP 498 .

Zliczanie, ile razy podciąg pojawia się w ciągu

Dostępna jest jedna metoda zliczania liczby wystąpień str.count w innym ciągu, str.count . str.count .


str.count(sub[, start[, end]])

str.count Zwraca int wskazując liczbę niepokrywające występującymi podnapis sub w innym ciągiem. Opcjonalne argumenty start i end wskazują początek i koniec wyszukiwania. Domyślnie start = 0 i end = len(str) co oznacza, że zostanie przeszukany cały ciąg:

>>> s = "She sells seashells by the seashore."
>>> s.count("sh")
2
>>> s.count("se")
3
>>> s.count("sea")
2
>>> s.count("seashells")
1

Określając inną wartość na start , end możemy uzyskać bardziej zlokalizowane wyszukiwanie i liczyć, na przykład, jeśli start jest równy 13 wezwanie do:

>>> s.count("sea", start)
1

jest równa:

>>> t = s[start:]
>>> t.count("sea")
1

Przetestuj początkowe i końcowe znaki ciągu

Aby przetestować początek i koniec danego ciągu w Pythonie, można użyć metod str.startswith() i str.endswith() .


str.startswith(prefix[, start[, end]])

Jak sama nazwa wskazuje, str.startswith służy do testowania, czy dany ciąg zaczyna się od podanych znaków w prefix .

>>> s = "This is a test string"
>>> s.startswith("T")
True
>>> s.startswith("Thi")
True
>>> s.startswith("thi")  
False

Opcjonalne argumenty „ start i end określają punkt początkowy i końcowy, od którego rozpoczyna się i kończy testowanie. W poniższym przykładzie, podając wartość początkową 2 nasz ciąg zostanie przeszukany od pozycji 2 a następnie:

>>> s.startswith("is", 2)
True

Daje to wartość True ponieważ s[2] == 'i' s[3] == 's' .

Możesz także użyć tuple aby sprawdzić, czy zaczyna się od zestawu ciągów

>>> s.startswith(('This', 'That'))
True
>>> s.startswith(('ab', 'bc'))
False

str.endswith(prefix[, start[, end]])

str.endswith jest dokładnie podobny do str.startswith z tą różnicą, że szuka znaków końcowych, a nie znaków początkowych. Na przykład, aby sprawdzić, czy ciąg znaków kończy się kropką, można napisać:

>>> s = "this ends in a full stop."
>>> s.endswith('.')
True
>>> s.endswith('!')
False

tak jak w przypadku startswith z więcej niż jednym znakiem można użyć jako sekwencji końcowej:

>>> s.endswith('stop.')
True
>>> s.endswith('Stop.')
False

Możesz także użyć tuple aby sprawdzić, czy kończy się na którymś z zestawów ciągów

>>> s.endswith(('.', 'something'))
True
>>> s.endswith(('ab', 'bc'))
False

Testowanie, z czego składa się łańcuch

Typ str Pythona zawiera również szereg metod, których można użyć do oceny zawartości łańcucha. Są to str.isalpha str.isdigit , str.isalnum , str.isspace . str.isalnum , str.isspace . str.isspace . str.isupper str.islower można testować za pomocą str.isupper , str.istitle . str.islower i str.istitle .


str.isalpha

str.isalpha nie przyjmuje argumentów i zwraca True jeśli wszystkie znaki w danym ciągu są alfabetyczne, na przykład:

>>> "Hello World".isalpha()  # contains a space
False
>>> "Hello2World".isalpha()  # contains a number
False
>>> "HelloWorld!".isalpha()  # contains punctuation
False
>>> "HelloWorld".isalpha()
True

W przypadku krawędzi pusty łańcuch ma wartość False jeśli jest używany z "".isalpha() .


str.isupper str.islower , str.istitle str.islower , str.istitle

Te metody testują wielkie litery w danym ciągu.

str.isupper to metoda zwracająca wartość True jeśli wszystkie znaki w danym ciągu są wielkie i, w przeciwnym razie, False .

>>> "HeLLO WORLD".isupper()
False
>>> "HELLO WORLD".isupper()
True
>>> "".isupper()
False

I odwrotnie, str.islower to metoda, która zwraca True jeśli wszystkie znaki w danym ciągu są małe i False przeciwnym razie.

>>> "Hello world".islower()
False
>>> "hello world".islower()
True
>>> "".islower()
False

str.istitle zwraca True jeśli podany ciąg znaków ma tytuł case; to znaczy każde słowo zaczyna się od dużej litery, po której następuje mała litera.

>>> "hello world".istitle()
False
>>> "Hello world".istitle()
False
>>> "Hello World".istitle()
True
>>> "".istitle()
False

str.isdecimal , str.isdigit , str.isnumeric

str.isdecimal zwraca, czy ciąg jest ciągiem cyfr dziesiętnych, odpowiednim do reprezentowania liczby dziesiętnej.

str.isdigit zawiera cyfry nie w formie odpowiedniej do przedstawienia liczby dziesiętnej, takie jak cyfry w indeksie górnym.

str.isnumeric obejmuje dowolne wartości liczbowe, nawet jeśli nie są cyframi, takie jak wartości spoza zakresu 0–9.

            isdecimal    isdigit   isnumeric

12345        True        True       True
១2߃໔5        True        True       True
①²³🄅₅       False       True       True
⑩⒓          False       False      True
Five         False       False      False

Bajtowania ( bytes w Pythonie 3, str w Pythonie 2), obsługują tylko isdigit , który sprawdza tylko podstawowe cyfry ASCII.

Podobnie jak w przypadku str.isalpha , pusty ciąg znaków ma wartość False .


str.isalnum

Jest to kombinacja str.isalpha i str.isnumeric , w szczególności zwraca wartość True jeśli wszystkie znaki w danym ciągu są alfanumeryczne , to znaczy składają się ze znaków alfabetycznych lub numerycznych:

>>> "Hello2World".isalnum()
True
>>> "HelloWorld".isalnum()
True
>>> "2016".isalnum()
True
>>> "Hello World".isalnum()  # contains whitespace
False

str.isspace

Zwraca wartość True jeśli ciąg zawiera tylko znaki spacji.

>>> "\t\r\n".isspace()
True
>>> " ".isspace()
True

Czasami łańcuch wygląda na „pusty”, ale nie wiemy, czy to dlatego, że zawiera tylko białe znaki, czy w ogóle nie ma znaku

>>> "".isspace()
False

Aby objąć tę sprawę, potrzebujemy dodatkowego testu

>>> my_str = ''
>>> my_str.isspace()
False
>>> my_str.isspace() or not my_str
True

Ale najkrótszym sposobem sprawdzenia, czy łańcuch jest pusty lub zawiera tylko znaki spacji, jest użycie strip (bez argumentów usuwa wszystkie wiodące i końcowe znaki spacji)

>>> not my_str.strip()
True

str.translate: Tłumaczenie znaków w ciągu

Python obsługuje metodę translate typu str która pozwala określić tabelę translacji (używaną do zamiany), a także dowolne znaki, które powinny zostać usunięte w tym procesie.

str.translate(table[, deletechars])
Parametr Opis
table Jest to tabela przeglądowa, która definiuje mapowanie od jednej postaci do drugiej.
deletechars Lista znaków, które należy usunąć z ciągu.

Metoda maketrans ( str.maketrans w Pythonie 3 i string.maketrans w Pythonie 2) pozwala wygenerować tabelę tłumaczeń.

>>> translation_table = str.maketrans("aeiou", "12345")
>>> my_string = "This is a string!"
>>> translated = my_string.translate(translation_table)
'Th3s 3s 1 str3ng!'

Metoda translate zwraca ciąg znaków, który jest przetłumaczoną kopią oryginalnego ciągu.


Możesz ustawić argument table na None jeśli potrzebujesz tylko usunąć znaki.

>>> 'this syntax is very useful'.translate(None, 'aeiou')
'ths syntx s vry sfl'

Usuwanie niechcianych znaków wiodących / końcowych z łańcucha

Dostępne są trzy metody, które umożliwiają usuwanie znaków wiodących i końcowych z ciągu: str.strip , str.lstrip . str.rstrip i str.lstrip . str.lstrip . Wszystkie trzy metody mają tę samą sygnaturę i wszystkie trzy zwracają nowy ciąg znaków z usuniętymi niechcianymi znakami.


str.strip([chars])

str.strip działa na dany ciąg i usuwa (pasków) na początku ani spływu znaków zawartych w parametrze chars ; jeśli chars nie są dostarczane lub ma wartość None , wszystkie białe znaki są domyślnie usuwane. Na przykład:

>>> "    a line with leading and trailing space     ".strip() 
'a line with leading and trailing space'

Jeśli podano chars , wszystkie zawarte w nim znaki są usuwane z ciągu, który jest zwracany. Na przykład:

>>> ">>> a Python prompt".strip('> ')  # strips '>' character and space character 
'a Python prompt'

str.rstrip([chars]) i str.lstrip([chars])

Metody te mają podobną semantykę i argumenty z str.strip() , ich różnica polega na kierunku, od którego zaczynają. str.rstrip() zaczyna się od końca łańcucha, a str.lstrip() dzieli się od początku łańcucha.

Na przykład za pomocą str.rstrip :

>>> "     spacious string      ".rstrip()
'     spacious string'

str.lstrip używając str.lstrip :

>>> "     spacious string      ".rstrip()
'spacious string      '

Porównywanie ciągów znaków bez rozróżniania wielkości liter

Porównywanie łańcucha znaków bez rozróżniania wielkości liter wydaje się trywialne, ale tak nie jest. Ta sekcja dotyczy tylko ciągów znaków Unicode (domyślnie w Pythonie 3). Zauważ, że Python 2 może mieć subtelne słabości w stosunku do Python 3 - późniejsza obsługa Unicode jest znacznie bardziej kompletna.

Pierwszą rzeczą, na którą należy zwrócić uwagę, że konwersje z usuwaniem wielkości liter w Unicode nie są trywialne. Istnieje tekst, dla którego text.lower() != text.upper().lower() , na przykład "ß" :

>>> "ß".lower()
'ß'

>>> "ß".upper().lower()
'ss'

Powiedzmy, że chciałeś bezmyślnie porównać "BUSSE" i "Buße" . Cholera, prawdopodobnie chcesz również porównać "BUSSE" i "BUẞE" równe - to nowsza forma kapitału. Zalecanym sposobem jest użycie casefold :

Python 3.x 3.3
>>> help(str.casefold)
"""
Help on method_descriptor:

casefold(...)
      S.casefold() -> str
    
     Return a version of S suitable for caseless comparisons.
"""

Nie używaj tylko lower . Jeśli casefold nie są dostępne, wykonanie .upper().lower() pomaga (ale tylko w niewielkim stopniu).

Następnie powinieneś rozważyć akcenty. Jeśli Twój renderer czcionek jest dobry, prawdopodobnie myślisz "ê" == "ê" - ale tak nie jest:

>>> "ê" == "ê"
False

To dlatego, że tak naprawdę jest

>>> import unicodedata

>>> [unicodedata.name(char) for char in "ê"]
['LATIN SMALL LETTER E WITH CIRCUMFLEX']

>>> [unicodedata.name(char) for char in "ê"]
['LATIN SMALL LETTER E', 'COMBINING CIRCUMFLEX ACCENT']

Najprostszym sposobem na poradzenie sobie z tym jest unicodedata.normalize . Prawdopodobnie chcesz skorzystać z normalizacji NFKD , ale sprawdź dokumentację. Potem się robi

>>> unicodedata.normalize("NFKD", "ê") == unicodedata.normalize("NFKD", "ê")
True

Aby zakończyć, tutaj jest to wyrażone w funkcjach:

import unicodedata

def normalize_caseless(text):
    return unicodedata.normalize("NFKD", text.casefold())

def caseless_equal(left, right):
    return normalize_caseless(left) == normalize_caseless(right)

Połącz listę ciągów w jeden ciąg

Ciąg może być używany jako separator do łączenia listy ciągów razem w pojedynczy ciąg przy użyciu metody join() . Na przykład możesz utworzyć ciąg, w którym każdy element na liście jest oddzielony spacją.

>>> " ".join(["once","upon","a","time"])
"once upon a time"

Poniższy przykład rozdziela elementy łańcucha za pomocą trzech łączników.

>>> "---".join(["once", "upon", "a", "time"])
"once---upon---a---time"

Przydatne stałe modułu łańcuchowego

Moduł string Pythona zapewnia stałe dla operacji związanych z łańcuchem. Aby ich użyć, zaimportuj moduł string :

>>> import string

string.ascii_letters :

ascii_lowercase i ascii_uppercase :

>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

string.ascii_lowercase :

Zawiera wszystkie małe litery ASCII:

>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

string.ascii_uppercase :

Zawiera wszystkie wielkie litery ASCII:

>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

string.digits :

Zawiera wszystkie znaki dziesiętne:

>>> string.digits
'0123456789'

string.hexdigits :

Zawiera wszystkie znaki szesnastkowe:

>>> string.hexdigits
'0123456789abcdefABCDEF'

string.octaldigits :

Zawiera wszystkie znaki ósemkowe:

>>> string.octaldigits
'01234567'

string.punctuation :

Zawiera wszystkie znaki, które są uważane za interpunkcję w lokalizacji C :

>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

string.whitespace :

Zawiera wszystkie znaki ASCII uważane za białe znaki:

>>> string.whitespace
' \t\n\r\x0b\x0c'

W trybie skryptowym print(string.whitespace) wypisze rzeczywiste znaki, użyj str aby otrzymać ciąg znaków zwrócony powyżej.


string.printable :

Zawiera wszystkie znaki, które są uważane za drukowalne; kombinacja string.digits , string.ascii_letters , string.punctuation i string.whitespace .

>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'

Odwracanie ciągu

Ciąg można odwrócić za pomocą wbudowanej funkcji reverse reversed() , która pobiera ciąg i zwraca iterator w odwrotnej kolejności.

>>> reversed('hello')
<reversed object at 0x0000000000000000>
>>> [char for char in reversed('hello')]
['o', 'l', 'l', 'e', 'h']

reversed() może być zawinięty w wywołanie do ''.join() celu utworzenia łańcucha z iteratora.

>>> ''.join(reversed('hello'))
'olleh'

Podczas gdy stosowanie reversed() może być bardziej czytelne dla niewtajemniczonych użytkowników Pythona, korzystanie z rozszerzonego krojenia z krokiem -1 jest szybsze i bardziej zwięzłe. Tutaj spróbuj zaimplementować go jako funkcję:

>>> def reversed_string(main_string):
...     return main_string[::-1]
...
>>> reversed_string('hello')
'olleh'

Wyjustuj ciągi

Python udostępnia funkcje uzasadniania ciągów, umożliwiając wstawianie tekstu, aby znacznie łatwiej wyrównywać różne ciągi.

Poniżej znajduje się przykład str.ljust i str.rjust :

interstates_lengths = {
    5: (1381, 2222),
    19: (63, 102),
    40: (2555, 4112),
    93: (189,305),
}
for road, length in interstates_lengths.items():
    miles,kms = length
    print('{} -> {} mi. ({} km.)'.format(str(road).rjust(4), str(miles).ljust(4), str(kms).ljust(4)))
  40 -> 2555 mi. (4112 km.)
  19 -> 63   mi. (102  km.)
   5 -> 1381 mi. (2222 km.)
  93 -> 189  mi. (305  km.)

ljust i rjust są bardzo podobne. Oba mają parametr width i opcjonalny parametr fillchar . Każdy ciąg utworzony przez te funkcje jest co najmniej tak długi, jak parametr width , który został przekazany do funkcji. Jeśli ciąg znaków jest dłuższy niż width ustawiona, nie jest obcinany. Argument fillchar , domyślnie spacja ' ' musi być pojedynczym znakiem, a nie ciągiem wieloznakowym.

Funkcja ljust fillchar koniec łańcucha, do którego jest wywołany, za pomocą fillchar aż ma width znaków width . Funkcja rjust początek łańcucha w podobny sposób. Dlatego l i r w nazwach tych funkcji odnoszą się do strony, w której oryginalny ciąg znaków, a nie fillchar , jest umieszczony w ciągu wyjściowym.

Konwersja danych str lub bajtów i znaków Unicode

Zawartość plików i wiadomości sieciowych może reprezentować zakodowane znaki. Często trzeba je przekonwertować na Unicode, aby wyświetlać poprawnie.

W Pythonie 2 konieczna może być konwersja danych str na znaki Unicode. Domyślnie ( '' , "" itd.) Jest łańcuchem ASCII, a wszelkie wartości poza zakresem ASCII są wyświetlane jako wartości specjalne. Ciągi znaków Unicode to u'' (lub u"" itp.).

Python 2.x 2.3
# You get "© abc" encoded in UTF-8 from a file, network, or other data source

s = '\xc2\xa9 abc'  # s is a byte array, not a string of characters
                    # Doesn't know the original was UTF-8
                    # Default form of string literals in Python 2
s[0]                # '\xc2' - meaningless byte (without context such as an encoding)
type(s)             # str - even though it's not a useful one w/o having a known encoding

u = s.decode('utf-8')  # u'\xa9 abc'
                       # Now we have a Unicode string, which can be read as UTF-8 and printed properly
                       # In Python 2, Unicode string literals need a leading u
                       # str.decode converts a string which may contain escaped bytes to a Unicode string
u[0]                # u'\xa9' - Unicode Character 'COPYRIGHT SIGN' (U+00A9) '©'
type(u)             # unicode

u.encode('utf-8')   # '\xc2\xa9 abc'
                    # unicode.encode produces a string with escaped bytes for non-ASCII characters

W Pythonie 3 konieczna może być konwersja tablic bajtów (zwanych „literałami bajtów”) na ciągi znaków Unicode. Domyślnie jest to teraz ciąg znaków Unicode, a literały bajtowe należy teraz wprowadzić jako b'' , b"" itp. Literał bajtowy zwróci wartość True to isinstance(some_val, byte) , zakładając, że some_val jest łańcuchem, który może być zakodowany jako bajty.

Python 3.x 3.0
# You get from file or network "© abc" encoded in UTF-8

s = b'\xc2\xa9 abc' # s is a byte array, not characters
                    # In Python 3, the default string literal is Unicode; byte array literals need a leading b
s[0]                # b'\xc2' - meaningless byte (without context such as an encoding)
type(s)             # bytes - now that byte arrays are explicit, Python can show that.

u = s.decode('utf-8')  # '© abc' on a Unicode terminal
                       # bytes.decode converts a byte array to a string (which will, in Python 3, be Unicode)
u[0]                # '\u00a9' - Unicode Character 'COPYRIGHT SIGN' (U+00A9) '©'
type(u)             # str
                    # The default string literal in Python 3 is UTF-8 Unicode

u.encode('utf-8')   # b'\xc2\xa9 abc'
                    # str.encode produces a byte array, showing ASCII-range bytes as unescaped characters.

Ciąg zawiera

Python sprawia, że niezwykle intuicyjne jest sprawdzanie, czy łańcuch zawiera dany podciąg. Wystarczy użyć operatora in :

>>> "foo" in "foo.baz.bar"
True

Uwaga: testowanie pustego łańcucha zawsze da wynik True :

>>> "" in "test"
True


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow