string
— Vanliga strängoperationer¶
Källkod: Lib/string.py
Strängkonstanter¶
De konstanter som definieras i denna modul är:
- string.ascii_letters¶
Konkateneringen av konstanterna
ascii_lowercase
ochascii_uppercase
som beskrivs nedan. Detta värde är inte lokalberoende.
- string.ascii_lowercase¶
De gemena bokstäverna
'abcdefghijklmnopqrstuvwxyz'
. Detta värde är inte lokalberoende och kommer inte att ändras.
- string.ascii_uppercase¶
De versala bokstäverna
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
. Detta värde är inte lokalberoende och kommer inte att ändras.
- string.digits¶
Strängen
'0123456789'
.
- string.hexdigits¶
Strängen
'0123456789abcdefABCDEF'
.
- string.octdigits¶
Strängen
'01234567'
.
- string.punctuation¶
Sträng av ASCII-tecken som betraktas som skiljetecken i
C
-landskapet:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
.
- string.printable¶
Sträng med ASCII-tecken som anses vara skrivbara av Python. Detta är en kombination av
digits
,ascii_letter
,punctuation
, ochwhitespace
.Anteckning
Av designskäl returnerar
string.printable.isprintable()
False
. I synnerhet ärstring.printable
inte tryckbar i POSIX mening (se LC_CTYPE).
- string.whitespace¶
En sträng som innehåller alla ASCII-tecken som betraktas som blanksteg. Detta inkluderar tecknen mellanslag, tabb, radmatning, retur, formmatning och vertikal tabb.
Anpassad strängformatering¶
Den inbyggda strängklassen ger möjlighet att göra komplexa variabelsubstitutioner och värdeformatering via metoden format()
som beskrivs i PEP 3101. Klassen Formatter
i modulen string
gör att du kan skapa och anpassa dina egna formateringsbeteenden för strängar med samma implementering som den inbyggda metoden format()
.
- class string.Formatter¶
Klassen
Formatter
har följande publika metoder:- format(format_string, /, *args, **kwargs)¶
Den primära API-metoden. Den tar en formatsträng och en godtycklig uppsättning positions- och nyckelordsargument. Det är bara ett omslag som anropar
vformat()
.Ändrad i version 3.7: Ett formatsträngargument är nu positionell-endast.
- vformat(format_string, args, kwargs)¶
Denna funktion utför själva formateringsarbetet. Den exponeras som en separat funktion för fall där du vill skicka in en fördefinierad ordlista med argument, i stället för att packa upp och packa om ordlistan som enskilda argument med hjälp av syntaxen
*args
och**kwargs
.vformat()
gör arbetet med att bryta upp formatsträngen i teckendata och ersättningsfält. Den anropar de olika metoder som beskrivs nedan.
Dessutom definierar
Formatter
ett antal metoder som är avsedda att ersättas av underklasser:- parse(format_string)¶
Loopa över format_string och returnera en iterabel med tupler (literal_text, field_name, format_spec, conversion). Detta används av
vformat()
för att dela upp strängen i antingen bokstavlig text eller ersättningsfält.Värdena i tupeln representerar konceptuellt ett spann med bokstavlig text följt av ett enda ersättningsfält. Om det inte finns någon bokstavlig text (vilket kan hända om två ersättningsfält förekommer i följd) kommer literal_text att vara en sträng med noll längd. Om det inte finns något ersättningsfält kommer värdena för field_name, format_spec och conversion att vara
None
. Värdet på field_name är oförändrat och automatisk numrering av icke-numrerade positionella fält görs avvformat()
.
- get_field(field_name, args, kwargs)¶
Konverterar field_name till ett objekt som ska formateras. Automatisk numrering av field_name som returneras från
parse()
görs avvformat()
innan denna metod anropas. Returnerar en tupel (obj, used_key). Standardversionen tar strängar av den form som definieras i PEP 3101, t.ex. ”0[name]” eller ”label.title”. args och kwargs är som de som skickas in tillvformat()
. Returvärdet used_key har samma betydelse som parametern key iget_value()
.
- get_value(key, args, kwargs)¶
Hämtar ett givet fältvärde. Argumentet key är antingen ett heltal eller en sträng. Om det är ett heltal representerar det indexet för det positionella argumentet i args; om det är en sträng representerar det ett namngivet argument i kwargs.
Parametern args är inställd på listan över positionella argument till
vformat()
, och parametern kwargs är inställd på ordlistan över nyckelordsargument.För sammansatta fältnamn anropas dessa funktioner endast för den första komponenten i fältnamnet; efterföljande komponenter hanteras genom normala attribut- och indexeringsoperationer.
Så till exempel skulle fältuttrycket ”0.name” göra att
get_value()
anropas med ett key-argument på 0. Attributetname
kommer att sökas upp efter attget_value()
har returnerats genom att anropa den inbyggda funktionengetattr()
.Om indexet eller nyckelordet hänvisar till ett objekt som inte existerar, bör ett
IndexError
ellerKeyError
visas.
- check_unused_args(used_args, args, kwargs)¶
Implementera kontroll av oanvända argument om så önskas. Argumenten till denna funktion är uppsättningen av alla argumentnycklar som faktiskt refererades till i formatsträngen (heltal för positionella argument och strängar för namngivna argument), och en referens till args och kwargs som skickades till vformat. Uppsättningen av oanvända args kan beräknas från dessa parametrar.
check_unused_args()
antas ge upphov till ett undantag om kontrollen misslyckas.
- format_field(value, format_spec)¶
format_field()
anropar helt enkelt den globala inbyggdaformat()
. Metoden tillhandahålls så att underklasser kan åsidosätta den.
- convert_field(value, conversion)¶
Konverterar värdet (returnerat av
get_field()
) givet en konverteringstyp (som i den tupel som returneras av metodenparse()
). Standardversionen förstår konverteringstyperna ’s’ (str), ’r’ (repr) och ’a’ (ascii).
Format String Syntax¶
Metoden str.format()
och klassen Formatter
har samma syntax för formatsträngar (även om underklasser i fallet med Formatter
kan definiera sin egen syntax för formatsträngar). Syntaxen är relaterad till syntaxen för formaterade strängkonstanter och mallsträngkonstanter, men den är mindre sofistikerad och stöder i synnerhet inte godtyckliga uttryck i interpolationer.
Formatsträngar innehåller ”ersättningsfält” som omges av hakparenteser {}
. Allt som inte finns inom hakparenteser betraktas som bokstavlig text, som kopieras oförändrad till utdatan. Om du behöver inkludera ett parentestecken i den bokstavliga texten kan det undvikas genom att dubblera: {{
och }}
.
Grammatiken för ett ersättningsfält är som följer:
replacement_field: "{" [field_name
] ["!"conversion
] [":"format_spec
] "}" field_name:arg_name
("."attribute_name
| "["element_index
"]")* arg_name: [identifier
|digit
+] attribute_name:identifier
element_index:digit
+ |index_string
index_string: <any source character except "]"> + conversion: "r" | "s" | "a" format_spec:format-spec:format_spec
I mindre formella termer kan ersättningsfältet börja med ett field_name som anger det objekt vars värde ska formateras och infogas i utdata i stället för ersättningsfältet. field_name följs eventuellt av ett conversion-fält, som föregås av ett utropstecken '!'
, och ett format_spec, som föregås av ett kolon ':'
. Dessa anger ett icke-standardformat för ersättningsvärdet.
Se även avsnittet Formatspecifikation Mini-språk.
Själva field_name inleds med ett arg_name som antingen är ett tal eller ett nyckelord. Om det är ett tal hänvisar det till ett positionellt argument och om det är ett nyckelord hänvisar det till ett namngivet nyckelordsargument. Ett arg_name behandlas som ett tal om ett anrop till str.isdecimal()
på strängen skulle returnera true. Om de numeriska arg_namnen i en formatsträng är 0, 1, 2, … i följd, kan de alla utelämnas (inte bara vissa) och siffrorna 0, 1, 2, … infogas automatiskt i den ordningen. Eftersom arg_name inte är citatavgränsat är det inte möjligt att ange godtyckliga ordboksnycklar (t.ex. strängarna '10'
eller ':-]'
) inom en formatsträng. arg_name kan följas av valfritt antal index- eller attribututtryck. Ett uttryck av formen '.name'
väljer det namngivna attributet med hjälp av getattr()
, medan ett uttryck av formen '[index]'
gör en indexuppslagning med hjälp av __getitem__()
.
Ändrad i version 3.1: De positionella argumentspecifikationerna kan utelämnas för str.format()
, så '{} {}'.format(a, b)
är likvärdigt med '{0} {1}'.format(a, b)
.
Ändrad i version 3.4: De positionella argumentspecifikationerna kan utelämnas för Formatter
.
Några enkla exempel på formatsträngar:
"Först ska du räkna till {0}" # Referenser första positionella argumentet
"Ge mig en {}" # Hänvisar implicit till det första positionella argumentet
"Från {} till {}" # Samma som "Från {0} till {1}"
"Mitt uppdrag är {name}" # Refererar till nyckelordsargumentet 'namn'
"Vikt i ton {0.weight}" # 'weight'-attribut för första positionsargumentet
"Förstörda enheter: {players[0]}" # Första elementet i nyckelordsargumentet 'players'.
Fältet conversion orsakar en typkooperation före formateringen. Normalt görs jobbet med att formatera ett värde av __format__()
-metoden för själva värdet. I vissa fall är det dock önskvärt att tvinga en typ att formateras som en sträng, vilket åsidosätter dess egen definition av formatering. Genom att konvertera värdet till en sträng innan __format__()
anropas, kringgås den normala formateringslogiken.
Tre konverteringsflaggor stöds för närvarande: '!s'
som anropar str()
på värdet, '!r'
som anropar repr()
och '!a'
som anropar ascii()
.
Några exempel:
"Harold är en smart {0!s}" # Anropar str() på argumentet först
"Ta fram det heliga {name!r}" # Anropar repr() på det första argumentet
"Mer {!a}" # Anropar ascii() på det första argumentet
Fältet format_spec innehåller en specifikation av hur värdet ska presenteras, inklusive detaljer som fältbredd, justering, utfyllnad, decimalprecision och så vidare. Varje värdetyp kan definiera sitt eget ”minispråk för formatering” eller tolkning av format_spec.
De flesta inbyggda typer stöder ett gemensamt formateringsminispråk, som beskrivs i nästa avsnitt.
Ett format_spec-fält kan också innehålla nästlade ersättningsfält. Dessa nästlade ersättningsfält kan innehålla fältnamn, konverteringsflagga och formatspecifikation, men djupare nästling är inte tillåten. Ersättningsfälten inom format_spec ersätts innan strängen format_spec tolkas. Detta gör att formateringen av ett värde kan specificeras dynamiskt.
Se avsnittet Exempel på format för några exempel.
Formatspecifikation Mini-språk¶
”Formatspecifikationer” används inom ersättningsfält som ingår i en formatsträng för att definiera hur enskilda värden presenteras (se Format String Syntax, f-strängar och t-strängar). De kan också skickas direkt till den inbyggda funktionen format()
. Varje formatterbar typ kan definiera hur formatspecifikationen ska tolkas.
De flesta inbyggda typer implementerar följande alternativ för formatspecifikationer, även om vissa av formateringsalternativen endast stöds av de numeriska typerna.
En allmän konvention är att en tom formatspecifikation ger samma resultat som om du hade anropat str()
på värdet. En icke-tom formatspecifikation ändrar vanligtvis resultatet.
Den allmänna formen för en standardformatspecificerare är:
format_spec: [options
][width_and_precision
][type
] options: [[fill
]align
][sign
]["z"]["#"]["0"] fill: <any character> align: "<" | ">" | "=" | "^" sign: "+" | "-" | " " width_and_precision: [width_with_grouping
][precision_with_grouping
] width_with_grouping: [width
][grouping
] precision_with_grouping: "." [precision
][grouping
] | "."grouping
width:digit
+ precision:digit
+ grouping: "," | "_" type: "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
Om ett giltigt align-värde anges kan det föregås av ett fill-tecken som kan vara vilket tecken som helst och som standard är ett mellanslag om det utelämnas. Det är inte möjligt att använda en bokstavlig hakparentes (”{
” eller ”}
”) som fill-tecken i en formatted string literal eller vid användning av metoden str.format()
. Det är dock möjligt att infoga en hakparentes med ett nästlat ersättningsfält. Denna begränsning påverkar inte funktionen format()
.
Betydelsen av de olika inriktningsalternativen är följande:
Alternativ |
Betydelse |
---|---|
|
Tvingar fältet att vara vänsterjusterat inom det tillgängliga utrymmet (detta är standard för de flesta objekt). |
|
Tvingar fältet att vara högerjusterat inom det tillgängliga utrymmet (detta är standard för siffror). |
|
Tvingar utfyllnaden att placeras efter tecknet (om sådant finns) men före siffrorna. Detta används för att skriva ut fält i formen ’+000000120’. Detta justeringsalternativ är endast giltigt för numeriska typer, exklusive |
|
Tvingar fältet att centreras inom det tillgängliga utrymmet. |
Observera att om inte en minsta fältbredd har definierats, kommer fältbredden alltid att vara lika stor som de data som ska fylla fältet, så att justeringsalternativet inte har någon betydelse i det här fallet.
Alternativet sign är endast giltigt för nummertyper och kan vara något av följande:
Alternativ |
Betydelse |
---|---|
|
Anger att ett tecken ska användas för både positiva och negativa tal. |
|
Anger att ett tecken endast ska användas för negativa tal (detta är standardbeteendet). |
tid |
Anger att ett inledande mellanslag ska användas för positiva tal och ett minustecken för negativa tal. |
Alternativet 'z'
tvingar negativa nollvärden i flyttal till positiva nollvärden efter avrundning till formatets precision. Detta alternativ är endast giltigt för presentationstyper med flyttal.
Ändrad i version 3.11: Alternativet 'z'
lades till (se även PEP 682).
Alternativet '#'
gör att den ”alternativa formen” används vid konverteringen. Den alternativa formen definieras på olika sätt för olika typer. Detta alternativ är endast giltigt för heltal, float och komplexa typer. För heltal, när binär, oktal eller hexadecimal utdata används, lägger detta alternativ till respektive prefix '0b'
, '0o'
, '0x'
eller '0X'
till utdatavärdet. För float och complex gör den alternativa formen att resultatet av konverteringen alltid innehåller ett decimaltecken, även om inga siffror följer efter det. Normalt visas ett decimaltecken i resultatet av dessa omvandlingar endast om det följs av en siffra. För konverteringarna 'g'
och 'G'
tas dessutom inte de efterföljande nollorna bort från resultatet.
width är ett decimalt heltal som definierar den minsta totala fältbredden, inklusive eventuella prefix, separatorer och andra formateringstecken. Om inget anges kommer fältbredden att bestämmas av innehållet.
När ingen explicit justering anges, möjliggör teckenmedveten nollställning för numeriska typer, utom complex
, om fältet width föregås av ett nolltecken ('0'
). Detta motsvarar ett fill-tecken av '0'
med en alignment-typ av '='
.
Ändrad i version 3.10: Om fältet width föregås av '0'
påverkar det inte längre standardinriktningen för strängar.
precision är ett decimalt heltal som anger hur många siffror som ska visas efter decimaltecknet för presentationstyperna 'f'
och 'F'
, eller före och efter decimaltecknet för presentationstyperna 'g'
eller 'G'
. För presentationstyper med strängar anger fältet den maximala fältstorleken - med andra ord, hur många tecken som kommer att användas från fältinnehållet. precision är inte tillåtet för presentationstyper för heltal.
Alternativet grouping efter fälten width och precision anger en siffergruppsavskiljare för heltal respektive bråkdelar av ett tal. Den kan vara en av följande:
Alternativ |
Betydelse |
---|---|
|
Infogar ett kommatecken var 3:e siffra för heltalspresentationstypen |
|
Infogar ett understreck var 3:e siffra för heltalspresentationstypen |
För en lokalt anpassad separator, använd presentationstypen 'n
istället.
Ändrad i version 3.1: Lagt till alternativet ','
(se även PEP 378).
Ändrad i version 3.6: Alternativet '_'
lades till (se även PEP 515).
Ändrad i version 3.14: Stöd alternativet gruppering för bråkdelen.
Slutligen avgör typ hur data ska presenteras.
De tillgängliga strängpresentationstyperna är:
Typ
Betydelse
's'
Format för strängar. Detta är standardtypen för strängar och kan utelämnas.
Ingen
Samma som
's'
.
De tillgängliga presentationstyperna för heltal är:
Typ
Betydelse
'b'
Binärt format. Utmatning av talet i bas 2.
'c'
Tecken. Konverterar heltalet till motsvarande unicode-tecken före utskrift.
'd'
Decimalt heltal. Utmatning av talet i bas 10.
'o'
Oktalformat. Utmatning av talet i bas 8.
'x'
Hex-format. Utmatar talet i bas 16, med små bokstäver för siffrorna över 9.
'X'
Hex-format. Utmatar talet i bas 16, med versaler för siffrorna över 9. Om
'#'
anges kommer prefixet'0x'
också att skrivas med versaler till'0X'
.
'n'
Nummer. Detta är samma sak som
'd'
, förutom att den använder den aktuella lokala inställningen för att infoga lämpliga siffergruppsavskiljare.Ingen
Samma som
'd'
.
Förutom ovanstående presentationstyper kan heltal formateras med de flyttalspresentationstyper som anges nedan (utom 'n'
och None
). När detta görs används float()
för att konvertera heltalet till ett flyttal före formateringen.
De tillgängliga presentationstyperna för float
och decimal
-värden är:
Typ
Betydelse
'e'
Vetenskaplig notation. För en given precision
p
, formaterar du talet i vetenskaplig notation med bokstaven ”e” som skiljer koefficienten från exponenten. Koefficienten har en siffra före ochp
siffror efter decimaltecknet, för totaltp + 1
signifikanta siffror. Om ingen precision anges används en precision på6
siffror efter decimaltecknet förfloat
, och alla koefficientsiffror visas förDecimal
. Omp=0
utelämnas decimaltecknet om inte alternativet#
används.
'E'
Vetenskaplig notation. Samma som
'e'
förutom att det använder ett versalt ’E’ som separatortecken.
'f'
Notation med fast punkt. För en given precision
p
formateras talet som ett decimaltal med exaktp
siffror efter decimaltecknet. Om ingen precision anges används en precision på6
siffror efter decimalpunkten förfloat
, och en precision som är tillräckligt stor för att visa alla koefficientsiffror förDecimal
. Omp=0
utelämnas decimaltecknet om inte alternativet#
används.
'F'
Fastpunktsnotation. Samma som
'f'
, men konverterarnan
tillNAN
ochinf
tillINF
.
'g'
Allmänt format. För en given precision
p >= 1
avrundas talet tillp
signifikanta siffror och sedan formateras resultatet antingen i fastpunktsformat eller i vetenskaplig notation, beroende på dess storlek. En precision på0
behandlas som likvärdig med en precision på1
.De exakta reglerna är som följer: anta att resultatet formaterat med presentationstyp
'e'
och precisionp-1
skulle ha exponentexp
. Om dåm <= exp < p
, därm
är -4 för flyttal och -6 förDecimals
, formateras talet med presentationstypen'f
och precisionenp-1-exp
. Annars formateras talet med presentationstyp'e
och precisionp-1
. I båda fallen tas obetydliga efterföljande nollor bort från signifikanten och decimaltecknet tas också bort om det inte finns några återstående siffror efter det, såvida inte alternativet'#'
används.Om ingen precision anges, används en precision på
6
signifikanta siffror förfloat
. FörDecimal
bildas resultatets koefficient av koefficientsiffrorna i värdet; vetenskaplig notation används för värden som är mindre än1e-6
i absolut värde och värden där platsvärdet för den minst signifikanta siffran är större än 1, och fastpunktsnotation används annars.Positiv och negativ oändlighet, positiv och negativ noll och nans formateras som
inf
,-inf
,0
,-0
respektivenan
, oavsett precision.
'G'
Allmänt format. Samma som
'g'
förutom att det växlar till'E'
om talet blir för stort. Representationerna av oändlighet och NaN är också versaler.
'n'
Nummer. Detta är samma sak som
'g'
, förutom att den använder den aktuella lokala inställningen för att infoga lämpliga siffergruppsavskiljare för den integrerade delen av ett nummer.
'%'
Procent. Multiplicerar talet med 100 och visas i fast format (
'f'
), följt av ett procenttecken.Ingen
För
float
är detta som typen'g'
, förutom att när fastpunktsnotation används för att formatera resultatet, innehåller det alltid minst en siffra efter decimalpunkten och växlar till den vetenskapliga notationen närexp >= p - 1
. När precisionen inte är specificerad kommer den senare att vara så stor som behövs för att representera det givna värdet på ett korrekt sätt.För
Decimal
är detta detsamma som antingen'g'
eller'G'
beroende på värdet avcontext.capitals
för den aktuella decimalkontexten.Den övergripande effekten är att matcha utdata från
str()
som ändrats av de andra formatmodifierarna.
Resultatet bör vara korrekt avrundat till en given precision p
av siffror efter decimaltecknet. Avrundningssättet för float
matchar det för round()
builtin. För Decimal
kommer avrundningssättet för den aktuella kontexten att användas.
De tillgängliga presentationstyperna för complex
är desamma som för float
('%'
är inte tillåtet). Både de reella och imaginära komponenterna i ett komplext tal formateras som flyttal, enligt den angivna presentationstypen. De separeras av det obligatoriska tecknet för den imaginära delen, och den senare avslutas med suffixet j
. Om presentationstypen saknas kommer resultatet att motsvara resultatet från str()
(komplexa tal med en reell del som inte är noll omges också av parenteser), eventuellt ändrat av andra formatmodifierare.
Exempel på format¶
Detta avsnitt innehåller exempel på syntaxen str.format()
och jämförelser med den gamla formateringen %
.
I de flesta fall liknar syntaxen den gamla %
-formateringen, med tillägget {}
och med :
som används i stället för %
. Till exempel kan '%03.2f'
översättas till '{:03.2f}'
.
Den nya formatsyntaxen stöder också nya och annorlunda alternativ, som visas i följande exempel.
Tillgång till argument genom position:
>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{}, {}, {}'.format('a', 'b', 'c') # 3.1+ only
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{2}, {1}, {0}'.format(*'abc') # unpacking argument sequence
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad') # arguments' indices can be repeated
'abracadabra'
Tillgång till argument med namn:
>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
'Coordinates: 37.24N, -115.81W'
>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)
'Coordinates: 37.24N, -115.81W'
Tillgång till argumentens attribut:
>>> c = 3-5j
>>> ('The complex number {0} is formed from the real part {0.real} '
... 'and the imaginary part {0.imag}.').format(c)
'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'
>>> class Point:
... def __init__(self, x, y):
... self.x, self.y = x, y
... def __str__(self):
... return 'Point({self.x}, {self.y})'.format(self=self)
...
>>> str(Point(4, 2))
'Point(4, 2)'
Tillgång till argumentens poster:
>>> coord = (3, 5)
>>> 'X: {0[0]}; Y: {0[1]}'.format(coord)
'X: 3; Y: 5'
Ersätter %s
och %r
:
>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"
Rikta in texten och ange en bredd:
>>> '{:<30}'.format('left aligned')
'left aligned '
>>> '{:>30}'.format('right aligned')
' right aligned'
>>> '{:^30}'.format('centered')
' centered '
>>> '{:*^30}'.format('centered') # use '*' as a fill char
'***********centered***********'
Ersätter %+f
, %-f
och % f
och anger ett tecken:
>>> '{:+f}; {:+f}'.format(3.14, -3.14) # show it always
'+3.140000; -3.140000'
>>> '{: f}; {: f}'.format(3.14, -3.14) # show a space for positive numbers
' 3.140000; -3.140000'
>>> '{:-f}; {:-f}'.format(3.14, -3.14) # show only the minus -- same as '{:f}; {:f}'
'3.140000; -3.140000'
Ersätter %x
och %o
och konverterar värdet till olika baser:
>>> # format also supports binary numbers
>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
'int: 42; hex: 2a; oct: 52; bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)
'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'
Använda kommatecken eller understreck som siffergruppsavskiljare:
>>> '{:,}'.format(1234567890)
'1,234,567,890'
>>> '{:_}'.format(1234567890)
'1_234_567_890'
>>> '{:_b}'.format(1234567890)
'100_1001_1001_0110_0000_0010_1101_0010'
>>> '{:_x}'.format(1234567890)
'4996_02d2'
>>> '{:_}'.format(123456789.123456789)
'123_456_789.12345679'
>>> '{:.,}'.format(123456789.123456789)
'123456789.123,456,79'
>>> '{:,._}'.format(123456789.123456789)
'123,456,789.123_456_79'
Uttrycka en procentsats:
>>> points = 19
>>> total = 22
>>> 'Correct answers: {:.2%}'.format(points/total)
'Correct answers: 86.36%'
Använda typspecifik formatering:
>>> import datetime
>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
'2010-07-04 12:15:58'
Nesting-argument och mer komplexa exempel:
>>> for align, text in zip('<^>', ['left', 'center', 'right']):
... '{0:{fill}{align}16}'.format(text, fill=align, align=align)
...
'left<<<<<<<<<<<<'
'^^^^^center^^^^^'
'>>>>>>>>>>>right'
>>>
>>> octets = [192, 168, 0, 1]
>>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
'C0A80001'
>>> int(_, 16)
3232235521
>>>
>>> width = 5
>>> for num in range(5,12):
... for base in 'dXob':
... print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')
... print()
...
5 5 5 101
6 6 6 110
7 7 7 111
8 8 10 1000
9 9 11 1001
10 A 12 1010
11 B 13 1011
Strängar för mallar ($-strängar)¶
Anteckning
Den funktion som beskrivs här introducerades i Python 2.4; en enkel mallmetod baserad på reguljära uttryck. Den är äldre än str.format()
, formaterade strängkonstanter och mallsträngkonstanter.
Det har inget att göra med mallsträngkonstanter (t-strings), som introducerades i Python 3.14. Dessa utvärderas till string.templatelib.Template
-objekt, som finns i modulen string.templatelib
.
Mallsträngar ger enklare strängsubstitutioner enligt beskrivningen i PEP 292. Ett primärt användningsområde för mallsträngar är för internationalisering (i18n) eftersom den enklare syntaxen och funktionaliteten i det sammanhanget gör det lättare att översätta än andra inbyggda strängformateringsfunktioner i Python. Som ett exempel på ett bibliotek som bygger på mallsträngar för i18n, se paketet flufl.i18n.
Mallsträngar stöder $
-baserade substitutioner enligt följande regler:
$$
är en escape; den ersätts med en enda$
.$identifier
namnger en substitutionsplatshållare som matchar en mappningsnyckel för"identifier"
. Som standard är"identifierare"
begränsad till en alfanumerisk ASCII-sträng (inklusive understreck) som börjar med ett understreck eller en ASCII-bokstav. Det första icke-identifierande tecknet efter tecknet$
avslutar denna platshållarspecifikation.${identifier}
är likvärdigt med$identifier
. Det krävs när giltiga identifieringstecken följer efter platshållaren men inte är en del av platshållaren, t.ex."${noun}ification"
.
Varje annan förekomst av $
i strängen kommer att resultera i att ett ValueError
uppstår.
Modulen string
tillhandahåller en klass Template
som implementerar dessa regler. Metoderna i Template
är:
- class string.Template(template)¶
Konstruktören tar ett enda argument som är mallsträngen.
- substitute(mapping={}, /, **kwds)¶
Utför mallsubstitutionen och returnerar en ny sträng. mapping är ett ordboksliknande objekt med nycklar som matchar platshållarna i mallen. Alternativt kan du ange nyckelordsargument, där nyckelorden är platshållarna. När både mapping och kwds anges och det finns dubbletter, har platshållarna från kwds företräde.
- safe_substitute(mapping={}, /, **kwds)¶
Som
substitute()
, förutom att om platshållare saknas från mapping och kwds, istället för att ge upphov till ettKeyError
undantag, kommer den ursprungliga platshållaren att visas i den resulterande strängen intakt. Dessutom, till skillnad frånsubstitute()
, kommer alla andra förekomster av$
helt enkelt att returnera$
istället för att ge upphov tillValueError
.Även om andra undantag fortfarande kan inträffa kallas den här metoden ”säker” eftersom den alltid försöker returnera en användbar sträng istället för att göra ett undantag. I en annan mening kan
safe_substitute()
vara allt annat än säker, eftersom den tyst ignorerar missbildade mallar som innehåller dinglande avgränsare, omatchade hängslen och livrem eller platshållare som inte är giltiga Python-identifierare.
- is_valid()¶
Returnerar
False
om mallen har ogiltiga platshållare som gör attsubstitute()
ger upphov tillValueError
.Tillagd i version 3.11.
- get_identifiers()¶
Returnerar en lista över giltiga identifierare i mallen, i den ordning de först visas, och ignorerar eventuella ogiltiga identifierare.
Tillagd i version 3.11.
Template
-instanser tillhandahåller också ett offentligt dataattribut:- template¶
Detta är det objekt som skickas till konstruktörens template-argument. I allmänhet bör du inte ändra det, men skrivskyddad åtkomst är inte påtvingad.
Här är ett exempel på hur man använder en mall:
>>> from string import Template
>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes kung pao'
>>> d = dict(who='tim')
>>> Template('Give $who $100').substitute(d)
Traceback (most recent call last):
...
ValueError: Invalid placeholder in string: line 1, col 11
>>> Template('$who likes $what').substitute(d)
Traceback (most recent call last):
...
KeyError: 'what'
>>> Template('$who likes $what').safe_substitute(d)
'tim likes $what'
Avancerad användning: Du kan härleda underklasser till Template
för att anpassa syntaxen för platshållare, avgränsningstecken eller hela det reguljära uttryck som används för att analysera mallsträngar. För att göra detta kan du åsidosätta dessa klassattribut:
delimiter – Detta är den bokstavliga sträng som beskriver en platshållare som introducerar avgränsare. Standardvärdet är
$
. Observera att detta inte bör vara ett reguljärt uttryck, eftersom implementationen kommer att anropare.escape()
på denna sträng vid behov. Observera vidare att du inte kan ändra avgränsaren efter att klassen har skapats (dvs. en annan avgränsare måste anges i underklassens klassnamnrymd).idpattern – Detta är det reguljära uttryck som beskriver mönstret för icke-braserade platshållare. Standardvärdet är det reguljära uttrycket
(?a:[_a-z][_a-z0-9]*)
. Om detta anges och braceidpattern ärNone
kommer detta mönster även att gälla för platshållare med klammer.Anteckning
Eftersom standard flags är
re.IGNORECASE
, kan mönstret[a-z]
matcha med vissa icke-ASCII-tecken. Det är därför vi använder den lokalaa
-flaggan här.Ändrad i version 3.7: braceidpattern kan användas för att definiera separata mönster som används inom och utanför hängslena.
braceidpattern – Detta är som idpattern men beskriver mönstret för platshållare med hakparenteser. Standardvärdet är
None
, vilket innebär att idpattern används (dvs. samma mönster används både inom och utanför hakparenteser). Om detta anges kan du definiera olika mönster för platshållare med och utan hakparenteser.Tillagd i version 3.7.
flags – De flaggor för reguljära uttryck som ska användas vid kompilering av det reguljära uttryck som används för att känna igen substitutioner. Standardvärdet är
re.IGNORECASE
. Observera attre.VERBOSE
alltid kommer att läggas till flaggorna, så anpassade idpattern måste följa konventioner för verbala reguljära uttryck.Tillagd i version 3.2.
Alternativt kan du ange hela det reguljära uttrycksmönstret genom att åsidosätta klassattributet pattern. Om du gör detta måste värdet vara ett objekt för reguljära uttryck med fyra namngivna fångstgrupper. Fångstgrupperna motsvarar de regler som anges ovan, tillsammans med regeln om ogiltig platshållare:
escaped – Denna grupp matchar escape-sekvensen, t.ex.
$$
, i standardmönstret.named – Denna grupp matchar det oskjutna platshållarnamnet; den bör inte inkludera avgränsaren i fångstgruppen.
braced – Denna grupp matchar platshållarnamnet som är omslutet av hakparenteser; den bör inte innehålla vare sig avgränsaren eller hakparenteser i den fångande gruppen.
invalid – Den här gruppen matchar alla andra avgränsningsmönster (vanligtvis en enda avgränsare) och den ska visas sist i det reguljära uttrycket.
Metoderna i denna klass kommer att ge ValueError
om mönstret matchar mallen utan att någon av dessa namngivna grupper matchar.
Hjälpfunktioner¶
- string.capwords(s, sep=None)¶
Dela upp argumentet i ord med
str.split()
, skriv varje ord med stor bokstav medstr.capitalize()
och sätt ihop orden med stor bokstav medstr.join()
. Om det valfria andra argumentet sep saknas eller ärNone
, ersätts serier av blanksteg med ett enda blanksteg och inledande och avslutande blanksteg tas bort, annars används sep för att dela och sammanfoga orden.