Ĉapitro 6 - Manipulado Strings
Subtenu la Aŭtoro: Aĉeti la libron sur Amazono aŭ
la libro / ebook pakaĵo rekte Neniu amelo Gazetaro .
Legi la aŭtora aliaj liberaj Python libroj:
manipulanta Strings
Teksto estas unu el la plej komunaj formoj de datumoj viajn programojn manipulos. Vi jam scipovas concatenate du kordoj valoroj kune kun la
+
operatoro, sed vi povas fari multe pli ol tio.
Vi povas ĉerpi partaj kordoj de ŝnuro valoroj, aldonu aŭ forigu
Interspacigo, konverti literojn al minuskla aŭ majuskla, kaj kontroli ke
kordoj estas formatita korekte. Vi povas eĉ skribi Python kodon por aliri la tondujo por kopii kaj bati teksto.
En ĉi tiu ĉapitro, vi lernos ĉio tio kaj pli.
Tiam vi devos labori tra du malsamaj programado projektoj: simpla
pasvorton direktisto kaj programo por aŭtomatigi la enuiga tasko de
formatado pecojn de teksto.
Laborante kun Ŝnuroj
Ni rigardu iuj el la manieroj Python permesas skribi, presi, kaj aliro kordoj en via kodo.
string literaloj
Tajpado ŝnuro valoroj en Python kodo estas sufiĉe simpla: Ili komencas kaj finas per simpla citaĵo. Sed kiel do vi povas uzi citaĵo ene kordo? Tajpante
'That is Alice's cat.'
Ne funkcios, ĉar Python pensas la ĉeno finiĝas post Alice
kaj la resto ( s cat.'
) Estas malvalida Python kodo. Feliĉe, estas multaj manieroj por tajpi kordoj. citiloj
Kordoj povas komenci kaj fini per citiloj, ĝuste kiel ili faras kun sola citaĵoj. Unu avantaĝo de uzi citiloj estas ke kordoj havas solan citaĵo karaktero en ĝi. Eniri la sekva en la interaga konko:
>>> Spamado = "Tio estas Alicio kato."
Ekde la kordoj komencas kun duobla citaĵo, Pitono scias ke la sola
citaĵo estas parto de la ĉeno kaj ne markante la fino de la kordo. Tamen, se vi bezonas uzi ambaŭ sola citaĵoj kaj citiloj en la kordo, vi bezonos uzi eskapo karakteroj.
eskapi Karakteroj
Eskapita karaktero permesas uzi signojn, alie neeble meti en linio. Eskapita karakteron konsistas backslash (
\
) sekvita de la karaktero vi volas aldoni al la ĉeno.
(Malgraŭ konsistanta el du karakteroj, ĝi estas kutime referita al kiel
unuopa eskapo karaktero.) Ekzemple, la karaktero de ellasilo por sola
citaĵo estas \'
. Vi povas uzi ĉi ene ĉeno kiu komencas kaj finas per ununura citaĵoj. Vidi kiel eskapo karakteroj laboras, eniras la sekva en la interaga konko: >>> Spamado = 'Diru saluton al Bob \' patrino.
Python scias ke ekde la sola citaĵo en
Bob\'s
havas backslash, ne sola citaĵo signifis fini la ĉenon valoro. La eskapo karakteroj \'
kaj \"
lasu vin metis solan citaĵoj kaj citiloj ene viajn ŝnurojn, respektive.
Tabelo 6-1 listigas la eskapo karakteroj povas uzi.
Tabelo 6-1. eskapi Karakteroj
eskapo karaktero
|
gravuraĵoj kiel
|
---|---|
\' |
sola citaĵo
|
\" |
citilon
|
\t |
klapeto
|
\n |
Lino (linerompo)
|
\\ |
backslash
|
Eniri la sekva en la interaga konko:
>>> Print ( "Saluton tie! \ NHow estas vi? \ NI \ 'm faras bone.") Saluton! Kiel vi fartas? Mi faras bone.
kruda Strings
Vi povas meti
r
antaŭ la komenco citilon de kordo fari ĝin kruda ŝnuro. Al kruda ŝnuro tute ignoras ĉiuj eskapo karakteroj kaj presas ajnan backslash kiu aperas en la kordo. Ekzemple, tajpu la sekvajn en la interaga konko: >>> Print (r'That estas Carol \ 's kato.') Ke estas Carol \ 's kato.
Ĉar tio estas kruda ŝnuro, Python konsideras la backslash kiel parto de la ligilo kaj ne kiel la komenco de ellasilo karaktero.
Raw strings estas helpema se vi tajpas ŝnuro valoroj kiuj enhavas
multaj deklivaj streketoj, kiel la kordoj uzata por regulaj esprimoj
priskribita en la sekva ĉapitro.
Multiline Strings kun Triobla Citaĵoj
Dum vi povas uzi la
\n
eskapo karaktero meti novan linion en linio, ĝi estas ofte pli simpla al uzi multiline kordoj. A multiline ĉenon en Pitono komencas kaj finas per aŭ tri solan citaĵoj aŭ tri citiloj. Ajna citaĵoj, taboj, aŭ linifinojn en inter la "triobla citiloj" estas konsideritaj parto de la kordo. Python deŝovon reguloj por blokoj ne aplikas al linioj ene multiline ŝnuro.
Malfermi la dosieron redaktoro kaj skribi lin sekva:
print ( '' 'Kara Alico, Hieraŭo kato estis arestita catnapping, kato ŝtelo kaj rabado. sincere, Bob '' ')
Savi tiun programon kiel catnapping.py kaj ruli ĝin. La eligo aspektos tiel ĉi:
Kara Alico, Hieraŭo kato estis arestita catnapping, kato ŝtelo kaj rabado. sincere, bob
Rimarku ke la sola citaĵo karaktero en
Eve's
ne devas esti eskapinta. Eskapante sola kaj citiloj estas laŭvola en kruda kordoj. La jenaj print()
alvoko estus presi identa teksto sed ne uzas multiline ŝnuro: print ( 'Kara Alico, \ n \ Neve \' s kato estis arestita catnapping, kato ŝtelo kaj rabado. \ n \ nSincerely, \ nBob ')
multiline Komentoj
Dum la kradon (
#
) markas la komencon de komento por la resto de la linio, multiline
ĉeno estas ofte uzata por komentoj kiuj ampleksas plurajn liniojn. Jeno estas perfekte valida Python kodo "" "Tiu estas testo Python programo. Skribita fare de Al Sweigart al@inventwithpython.com Tiu programo estis dizajnita por Python 3, ne Python 2. "" " def spamado (): "" "Jen multiline komenton helpi klarigi kion la spamado () funkcio faras. "" " presi ( 'Saluton!')
Indeksado kaj slicing Strings
Kordoj uzi indeksoj kaj tranĉaĵoj sammaniere listoj fari. Vi povas pensi de la ĉeno
'Hello world!'
Kiel listo kaj ĉiu karaktero en la kordo kiel objekton kun responda indekso. ' Saluton mondo ! ' 0 1 2 3 4 5 6 7 8 9 10 11
La spaco kaj ekkrion punkto estas inkluzivita en la karaktero grafo, tiel
'Hello world!'
Estas 12 signojn longa, de H
ĉe indekso 0 ĝis !
Indekso 11.
Eniri la sekva en la interaga konko:
>>> Spamado = 'Saluton mondo!' >>> Spamado [0] 'H' >>> Spamado [4] 'O' >>> Spamado [-1] '!' >>> Spamado [0: 5] Saluton >>> Spamado [5] Saluton >>> Spamado [6] 'Mondo!'
Se vi specifas indekso, vi ricevos la karaktero ĉe tiu pozicio en la ĉeno. Se vi specifi gamon de unu indekso al alia, la starta indekso estas inkluzivita kaj la fino index ne. Tial, se spamado estas
'Hello world!'
, spam[0:5]
estas 'Hello'
. La subĉeno vi ricevas el spam[0:5]
inkludos ĉion de spam[0]
por spam[4]
, lasante la spaco je indekso 5.
Notu ke tranĉinte ŝnuro ne modifas la originalan tekston. Vi povas kapti tranĉaĵo de unu variablo en aparta variablo. Provu tajpi la sekva en la interaga konko:
>>> Spamado = 'Saluton mondo!' >>> Fizz = spamado [0: 5] >>> Fizz Saluton
Per tranĉinte kaj stokante la rezultan subĉeno en alia variablo, vi
povas havi ambaŭ la tuta ĉeno kaj la subĉeno oportuna por rapida, facila
aliro.
La en kaj ne en Telefonistoj kun Ŝnuroj
La
in
kaj not in
operatoroj povas esti uzata kun kordoj samkiel kun listo valoroj. Esprimo kun du kordoj aliĝis uzante in
aŭ not in
taksos al Bulea True
aŭ False
. Eniri la sekva en la interaga konko: >>> 'Saluton' en 'Saluton Mondo' veraj >>> 'Saluton' en 'Saluton' veraj >>> 'SALUTON' en 'Saluton Mondo' falsa >>> '' En 'spamado' veraj >>> 'Katojn' ne 'katoj kaj hundoj' falsa
Tiuj esprimoj testi ĉu la unua ĉeno (la ĝusta ŝnuro, usklecodistinga) troviĝas ene de la dua ŝnuro.
Utila String Metodoj
Pluraj kordoj metodoj analizi kordoj aŭ krei transformita ŝnuro valoroj. Tiu sekcio priskribas la metodojn vi uzos pli ofte.
La supra (), malsupra (), isupper () kaj islower () String Metodoj
La
upper()
kaj lower()
kordoj metodoj resendas novan ĉenon kie ĉiuj literoj en la originala ĉeno estis konvertita al majuskla aŭ minuskla, respektive. Nonletter karakterojn en la kordo restas neŝanĝita. Eniri la sekva en la interaga konko: >>> Spamado = 'Saluton mondo!' >>> Spamado = spam.upper () >>> spamon 'SALUTON MONDO!' >>> Spamado = spam.lower () >>> spamon 'Saluton mondo!'
Notu ke ĉi tiuj metodoj ne ŝanĝas la kordo mem sed revenos nova ŝnuro valoroj. Se vi volas ŝanĝi la originalan tekston, vi devas voki
upper()
aŭ lower()
sur la ŝnuro kaj poste atribui la novan ĉenon al la variablo kie la originalo estis stokitaj. Tio estas kial vi devas uzi spam = spam.upper()
ŝanĝi la ĉenon en spam
anstataŭ simple spam.upper()
. (Tio estas, kvazaŭ variablo eggs
enhavas la valoron 10
. Skribante eggs + 3
ne ŝanĝas la valoron de eggs
, sed eggs = eggs + 3
faras.)
La
upper()
kaj lower()
metodoj estas helpema se vi bezonas fari kazo-sensenta komparo. La kordoj 'great'
kaj 'GREat'
estas ne egala al unu la alian. Sed en la sekvanta malgranda programo, ne gravas ĉu la uzanto tajpas Great
, GREAT
, aŭ grEAT
, ĉar la ŝnuro estas unue konvertita al minuskla. print ( 'Kiel vi fartas?') sento = input () se feeling.lower () == 'granda': presi ( 'Mi sentas grandan tro.) alie: presi ( 'mi esperas la resto de via tago estas bona.)
Kiam vi kuros ĉi programo, la demando estas montrata, kaj enirinte variado sur
great
, kiel GREat
, estos ankoraŭ doni la eligo I feel great too
.
Aldonante kodo al via programo por trakti variadoj aŭ eraroj en uzanto
enigo, ekzemple nekonstanta capitalización, faros viajn programojn
facila uzi kaj malpli verŝajna malsukcesi. Kiel vi fartas? granda Mi sentas grandan tro.
La
isupper()
kaj islower()
metodoj revenos Bulea True
valoro se la ŝnuro havas almenaŭ unu literon kaj ĉiuj leteroj estas majuskla aŭ minuskla, respektive. Alie, la metodo revenas False
. Eniri la sekva en la interaga ŝelo, kaj rimarki kion ĉiu metodo alvoko revenas: >>> Spamado = 'Saluton mondo!' >>> Spam.islower () falsa >>> Spam.isupper () falsa >>> 'HELLO'.isupper () veraj >>> 'Abc12345'.islower () veraj >>> '12345'.islower () falsa >>> '12345'.isupper () falsa
Ekde la
upper()
kaj lower()
kordoj metodoj sin reveni kordoj, vi povas nomi ĉenon metodoj sur tiuj revenis ŝnuro valoroj ankaŭ. Esprimoj kiuj faras ĉi aspektos kiel ĉeno de telefono vokoj. Eniri la sekva en la interaga konko: >>> 'Hello'.upper () Saluton >>> 'Hello'.upper (). Suba () 'Saluton' >>> 'Hello'.upper (). Suba (). Supra () Saluton >>> 'HELLO'.lower () 'Saluton' >>> 'HELLO'.lower (). Islower () veraj
La isX String Metodoj
Kune kun
islower()
kaj isupper()
, estas pluraj kordoj metodoj kiuj havas nomojn komencante kun la vorto. Tiuj metodoj reveni Bulea valoro kiu priskribas la naturon de la kordo. Jen kelkaj komunaj is
X
ŝnuro metodoj: isalpha()
redonasTrue
se la kordo konsistas nur el literoj kaj ne malplena.isalnum()
redonasTrue
se la kordo konsistas nur el literoj kaj ciferoj kaj ne malplena.isdecimal()
redonasTrue
se la kordo konsistas nur el nombraj karakteroj kaj ne malplena.isspace()
redonasTrue
se la kordo konsistas nur de spacoj, taboj, kaj novajn liniojn kaj ne malplena.istitle()
redonasTrue
se la kordo konsistas nur el vortoj kiuj komencas kun majuskla litero sekvata de nur minusklaj literoj.
Eniri la sekva en la interaga konko:
>>> 'Hello'.isalpha () veraj >>> 'Hello123'.isalpha () falsa >>> 'Hello123'.isalnum () veraj >>> 'Hello'.isalnum () veraj >>> '123'.isdecimal () veraj >>> '' .isspace () veraj >>> 'This Is Titolo Case'.istitle () veraj >>> 'This Is Titolo Kazo 123'.istitle () veraj >>> 'Tiu Is not Titolo Case'.istitle () falsa >>> 'This Is NOT Titolo Kazo Either'.istitle () falsa
La
is
X
ŝnuro metodoj estas utilaj kiam vi bezonos por validigi uzanto enigo. Ekzemple, la sekvanta programo ree demandas uzantojn por ilia aĝo kaj pasvorto ĝis ili provizas validan enigo. Malfermi novan dosieron redaktanto fenestro kaj eniri tiun programon, ŝparante ĝin kiel validateInput.py: dum Vera: presi ( 'Entajpu vian aĝon:') o = input () se age.isdecimal (): paŭzo presi ( 'Bonvolu entajpi numeron por via aĝo.) dum Vera: presi ( 'Elekti novan pasvorton (literoj kaj ciferoj nur):') pasvorto = input () se password.isalnum (): paŭzo print ( 'Pasvortoj nur literoj kaj ciferoj.')
En la unua
while
buklo, ni petas la uzanto por sia aĝo kaj stoki iliajn enigo en age
. Se age
estas valida (dekuman) valoron, ni rompos el cxi tiu unua while
buklo kaj pluiri al la dua, kiu petas pasvorton. Alie, ni informos la uzanton ke ili donu kelkajn kaj denove demandi ilin eniri ilian aĝon. En la dua while
buklo, ni petas pasvorton, stoki la uzanto enigo en password
, kaj rompi la buklo se la enigo estis litercifera.
Se ne, ni ne estas kontenta tiel ni diros la uzanto la pasvorton
bezonas esti litercifera kaj denove demandi al ili eniri pasvorton.
Kiam kuras, la programo eligo aspektas jene:
Entajpu vian aĝon: kvardek du Bonvolu enmeti numeron por via aĝo. Entajpu vian aĝon: 42 Elekti novan pasvorton (literoj kaj ciferoj nur): secr3t! Pasvortoj nur literoj kaj ciferoj. Elekti novan pasvorton (literoj kaj ciferoj nur): secr3t
Nomante
isdecimal()
kaj isalnum()
sur variabloj, ni povas testi ĉu la valoroj stokitaj en tiuj variabloj estas dekuma aŭ ne, litercifera aŭ ne. Tie, ĉi tiuj provoj helpi nin malakcepti la enigo forty two
kaj akcepti 42
kaj malakcepti secr3t!
Kaj favoru secr3t
. La startswith () kaj endswith () String Metodoj
La
startswith()
kaj endswith()
metodoj revenos True
se la kordoj valoro ili vokis komencas aŭ ekstremaj (respektive) kun la ĉeno pasis al la telefono; alie, ili revenos False
. Eniri la sekva en la interaga konko: >>> 'Saluton mondo!'. Startswith ( 'Saluton') veraj >>> 'Saluton mondo!'. Endswith ( 'mondo!') veraj >>> 'Abc123'.startswith (' abcdef ') falsa >>> 'Abc123'.endswith ('12) falsa >>> 'Saluton mondo!'. Startswith ( 'Saluton mondo!') veraj >>> 'Saluton mondo!'. Endswith ( 'Saluton mondo!') veraj
Tiuj metodoj estas utilaj alternativoj al la
==
egalas operatoro se vi bezonos por kontroli nur ĉu la unua aŭ lasta
parto de la kordo, prefere ol la tuta afero, estas egala al alia linio. La aliĝu () kaj divido () String Metodoj
La
join()
metodo estas utila kiam vi havas liston de kordoj kiuj bezonas esti kunigitaj en sola ĉeno valoro. La join()
metodo nomata sur ŝnureto, gets pasis listo de kordoj, kaj redonas ĉenon. La liverita ĉeno estas la kunmeto de ĉiu ŝnuro en la pasita -in listo. Ekzemple, tajpu la sekvajn en la interaga konko: >>> ',' .join ([ 'Katoj', 'ratoj', 'vespertoj']) 'Katoj, ratoj, vespertoj' >>> '' .join ([ 'Mia', 'nomo', 'estas', 'Simon']) Mia nomo estas Simon ' >>> 'ABC'.join ([' Mia ',' nomo ',' estas ',' Simon ']) 'MyABCnameABCisABCSimon'
Rimarkos ke la ligilo
join()
alvokas inserta inter ĉiu serio de la lerta argumento. Ekzemple, kiam join(['cats', 'rats', 'bats'])
oni nomas en la ', '
string, la liverita ĉeno estas 'katoj, ratoj, vespertoj'.
Memoru ke
join()
tuŝas kordo valoro kaj estas pasita listo valoro. (Estas facile hazarde nomas ĝin la revés.) La split()
metodo faras la malon: ĝi nomiĝas sur ŝnuro valoron kaj resendas liston de kordoj. Eniri la sekva en la interaga konko: >>> Mia nomo estas Simon'.split () [ 'Mia', 'nomo', 'estas', 'Simon']
Defaŭlte, la kordo
'My name is Simon'
estas disfendita kie spaceto karakteroj kiel ekzemple la spaco, langeto, aŭ lino karakteroj troviĝas. Tiuj spacetoj ne inkluzivita en la kordoj en la respondo listo. Vi povas pasi delimitador ŝnuro al la split()
metodo por specifi malsaman ĉeno fendi super. Ekzemple, tajpu la sekvajn en la interaga konko: >>> 'MyABCnameABCisABCSimon'.split (' ABC ') [ 'Mia', 'nomo', 'estas', 'Simon'] >>> Mia nomo estas Simon'.split ( 'm') [Mia na ',' e estas Si ',' pri ']
Ofta uzo de
split()
estas al fendi la multiline ĉeno laŭ la linion karakteroj. Eniri la sekva en la interaga konko: >>> Spamado = '' 'Kara Alico, Kiel vi estis fartanta? Mi fartas bone. Estas ujo en la fridujo ke estas etikedita "Lakto Eksperimento". Bonvolu ne trinki ĝin. sincere, Bob '' ' >>> Spam.split ( '\ n') [ 'Kara Alico,', 'Kiel vi estis? Mi fartas bone. ',' Tie estas ujo en la fridujo ',' kiu estas labeled "Lakto Eksperimento". ',' ',' Bonvolu ne trinki ĝin. ', 'Sincere,', 'Bob']
Pasante
split()
la argumenton '\n'
lasas nin dividi la multiline string stokitaj en spam
kune la linifinojn kaj resendas liston en kiu ĉiu ero respondas al unu linio de la kordo. Pravigante Teksto kun rjust (), ljust () kaj centro ()
La
rjust()
kaj ljust()
kordoj metodoj resendas vatitaj versio de la ŝnuro ili vokis, kun spacoj enigita pravigi la tekston. La unua argumento por ambaŭ metodoj estas entjero longo por la pravigita ŝnuro. Eniri la sekva en la interaga konko: >>> 'Hello'.rjust (10) Saluton >>> 'Hello'.rjust (20) Saluton >>> Saluton World'.rjust (20) ' Saluton mondo' >>> 'Hello'.ljust (10) Saluton
'Hello'.rjust(10)
diras ke ni volas dekstra pravigi 'Hello'
en ĉeno de sumlongo 10
. 'Hello'
estas kvin karakteroj, tial kvin spacoj aldoniĝos al lia maldekstra, donante al ni kordoj de 10 karakteroj kun 'Hello'
pravigita dekstre.
Laŭvola dua argumento al
rjust()
kaj ljust()
estos specifi ĝissate karaktero aliaj ol spaceto. Eniri la sekva en la interaga konko: >>> 'Hello'.rjust (20,' * ') '*************** Saluton >>> 'Hello'.ljust (20' - ') Saluton --------------- '
La
center()
kordoj metodo funkcias kiel ljust()
kaj rjust()
sed centras la teksto anstataŭ pravigante ĝin al la maldekstra aŭ dekstra. Eniri la sekva en la interaga konko: >>> 'Hello'.center (20) Saluton >>> 'Hello'.center (20' = ') '======= Saluton ========'
Tiuj metodoj estas precipe utila kiam vi devas presi tabular datumoj kiuj havas la ĝustan interspacigo. Malfermi novan dosieron redaktanto fenestro kaj eniri la sekvan kodon, ŝparante ĝin kiel picnicTable.py:
def printPicnic (itemsDict, leftWidth, rightWidth): print ( 'PICNIC ITEMS'.center (leftWidth + rightWidth,' - ')) por k, v en itemsDict.items (): print (k.ljust (leftWidth, '.') + str (v) .rjust (rightWidth)) picnicItems = { 'sandviĉoj' 4, 'pomojn': 12, 'tasoj' 4, 'kuketoj': 8000} printPicnic (picnicItems, 12, 5) printPicnic (picnicItems, 20, 6)
En tiu programo, ni difini
printPicnic()
metodo kiu prenos en vortaro de informo kaj uzo center()
, ljust()
, kaj rjust()
por montri tiun informon en bonorde vicigita tablo-simila formato.
La vortaro, ke ni pasas al
printPicnic()
estas picnicItems
. En picnicItems
, ni havas 4 sandviĉoj, 12 pomoj, 4 tasoj kaj 8000 kuketojn. Ni volas organizi ĉi tiun informon en du kolumnoj, kun la nomo de la objekto sur la maldekstra kaj la kvanto dekstre.
Por fari tion, ni decidi kiel larĝa ni volas la maldekstra kaj dekstra kolumnoj esti. Kune kun nia vortaro, ni pasas ĉi tiujn valorojn al
printPicnic()
. printPicnic()
prenas en vortaro, oni leftWidth
por la maldekstra kolumno de tablo, kaj rightWidth
por la dekstra kolumno. Presas titolon, PICNIC ITEMS
, centrita super la tablo.
Tiam, ĝi cikloj tra la vortaro, presi ĉiu klavo valoro paro en linio
kun la ŝlosilo pravigita maldekstra kaj vatitaj de periodoj, kaj la
valoro pravigas dekstra kaj vatitaj per spacoj.
Post difinanta
printPicnic()
, ni difini la vortaro picnicItems
kaj nomas printPicnic()
dufoje, pasante ĝin malsamaj larĝaj por la maldekstra kaj dekstra tablo kolumnoj.
Kiam vi kuros ĉi programo, la pikniko aĵoj estas montrata dufoje. Unuafoje la maldekstra kolumno estas 12 signoj larĝa, kaj la dekstra kolumno estas 5 karakteroj larĝa. La dua epoko estas 20 kaj 6 karakteroj larĝa, respektive.
--- PICNIC ITEMS-- sandviĉoj .. 4 pomoj ...... 12 tasoj ........ 4 kuketojn ..... 8000 ------- PICNIC ITEMS ------- sandviĉoj .......... 4 pomoj .............. 12 tasoj ................ 4 kuketojn ............. 8000
Uzante
rjust()
, ljust()
kaj center()
permesas certigi ke kordoj estas bonorde vicigita, eĉ se vi ne estas certa, kiom da karakteroj longe viajn ŝnurojn estas. Forigado Blankaĵoj kun strio (), rstrip (), kaj lstrip ()
Kelkfoje vi eble volas senvestigi ekstere spacetoj (spaco, langeto kaj
lino) de la maldekstra flanko, dekstre, aŭ ambaŭ flankoj de kordo. La
strip()
kordoj metodo revenos novan ĉenon sen spacetoj karakteroj ĉe la komenco aŭ fino. La lstrip()
kaj rstrip()
metodoj forigos spaceto karakteroj de la maldekstra kaj dekstra flankoj, respektive. Eniri la sekva en la interaga konko: >>> Spamado = 'Saluton Mondo' >>> Spam.strip () 'Saluton mondo' >>> Spam.lstrip () 'Saluton mondo ' >>> Spam.rstrip () ' Saluton mondo'
Laŭvole, ŝnuro argumento specifas kiun karakteroj sur la randoj devus esti senigita. Eniri la sekva en la interaga konko:
>>> Spamado = 'SpamSpamBaconSpamEggsSpamSpam' >>> Spam.strip ( 'AMPS') 'BaconSpamEggs'
Pasante
strip()
la argumenton 'ampS'
diros al senvestigi occurences de a
, m
, p
, kaj ĉefurbo S
de la finoj de la ŝnuro stokita en spam
. La ordo de la karakteroj en la ĉeno pasis al strip()
ne gravas: strip('ampS')
faros la samon kiel strip('mapS')
aŭ strip('Spam')
. Kopii kaj Alglui Strings kun la pyperclip Modulo
La
pyperclip
modulo havas copy()
kaj paste()
funkcioj kiuj povas sendi tekston al kaj ricevi tekston de via komputilo tondujo.
Sendante la rezulto de via programo por la tondujo faros ĝin facile
algluu ĝin al mesaĝo, vorto procesoro, aŭ alian programaron.
Pyperclip ne venas kun Python. Instali ĝin, sekvu la direktojn por instali triaj moduloj en Apendico A. Post instali la
pyperclip
modulo, eniri la sekva en la interaga konko: >>> Import pyperclip >>> Pyperclip.copy ( 'Saluton mondo!') >>> Pyperclip.paste () 'Saluton mondo!'
Kompreneble, se io ekster de via programo ŝanĝas la enhavo de la poŝo, la
paste()
funkcio estos redoni ĝin. Ekzemple, se mi kopiis ĉi frazo al la tondujo kaj poste nomita paste()
, ĝi aspektus tiel: >>> Pyperclip.paste () 'Ekzemple, se mi kopiis ĉi frazo al la tondujo kaj poste nomita almeti (), ĝi aspektus tiel: '
Projekto: Pasvorto ŝranko
Vi probable havas kontojn sur diversaj retejoj.
Ĝi estas malbona kutimo uzi la saman pasvorton por ĉiu de ili ĉar se iu
el tiuj lokoj havas breĉo de sekureco, la hackers lernos la pasvorton
al ĉiuj viaj aliaj kontoj.
Ĝi estas bona por uzi pasvorton direktisto programaro sur via komputilo
kiu uzas unu majstro pasvorton malŝlosi la pasvorton direktisto. Tiam vi povas kopii ajnan konto pasvorton por la tondujo kaj algluu ĝin en la retejo la pasvorto kampo.
La pasvorton direktisto programo vi kreas en ĉi tiu ekzemplo ne estas
sekura, sed proponas bazan pruvo de kiel tiaj programoj funkcios.
Paŝo 1: Programo Dezajno kaj Datumoj Strukturoj
Vi volas povi kuri ĉi programo kun komandlinio argumento kiu estas la konto nomon-ekzemple, retpoŝto aŭ blogo. Ke konto pasvorton estos kopiita al la tondujo tiel ke la uzanto povas almeti ĝin Pasvorto kampo. Tiel, la uzanto povas havi longajn, komplika pasvortojn sen devi parkerigi ilin.
Malfermi novan dosieron redaktanto fenestro kaj savi la programon kiel pw.py. Vi devas komenci la programo kun
#!
(Shebang) linio (vidu Appendix B) kaj ankaŭ devus skribi komenton kiuj mallonge priskribas la programon. Ĉar vi volas asocii ĉiu konto nomon kun ĝia pasvorton, vi povas stoki tiujn kiel kordoj en vortaro. La vortaro estos la datumstrukturo kiu organizas vian konton kaj pasvorton datumojn. Fari vian programon aspektas kiel la sekvaj: #! python3 # Pw.py - An necerta pasvorton ŝranko programo. Pasvortoj = { 'retpoŝtan': 'F7minlBDDuvMJuxESSKHFhTxFtjVB6', 'Blogo': 'VmALvQyKAxiVH5G8v01if1MLZF3sdt', Pakaĵojn ':' 12345 '}
Paŝo 2: Handle Komando Linio Argumentoj
La komandlinio argumentoj estos stokitaj en la variablo
sys.argv
. (Vidu Apendico B por pli informo sur kiel uzi komandlinio argumentoj en viaj programoj.) La unua ero en sys.argv
listo devus ĉiam esti ĉeno enhavante la programo dosiernomo ( 'pw.py'
), kaj la dua ero estas la deziro esti la unua komandlinio argumento. Cxar tiu programo, ĉi tiu argumento estas la nomo de la konto kies pasvorton vi volas. Ekde la komandlinio argumento estas deviga, vi montras uzadon mesaĝon al la uzanto se ili forgesos de aldoni ĝin (te, se la sys.argv
listo havas malpli ol du valoroj en gxi). Fari vian programon aspektas kiel la sekvaj: #! python3 # Pw.py - An necerta pasvorton ŝranko programo. Pasvortoj = { 'retpoŝtan': 'F7minlBDDuvMJuxESSKHFhTxFtjVB6', 'Blogo': 'VmALvQyKAxiVH5G8v01if1MLZF3sdt', Pakaĵojn ':' 12345 '} importado sys se len (sys.argv) <2: print ( 'Uzado: python pw.py [konto] - kopii kontan pasvorton') sys.exit () konto = sys.argv [1] # unua komandlinio arg estas la konto nomon
Paŝo 3: Kopii la Dekstra Pasvorto
Nun ke la konto nomon estas stokita kiel linio en la variablo
account
, vi devas vidi ĉu ekzistas en la PASSWORDS
vortaro kiel ŝlosila. Se jes, vi volas kopii la ŝlosilo valoro al la tondujo uzante pyperclip.copy()
. (Ĉar vi uzas la pyperclip
modulo, vi devas importi ĝin.) Notu ke vi ne vere bezonas la account
variablo; vi povus simple uzi sys.argv[1]
ĉie account
estas uzata en ĉi tiu programo. Sed variablo nomata account
estas multe pli legebla ol io kripta kiel sys.argv[1]
.
Fari vian programon aspektas kiel la sekvaj:
#! python3 # Pw.py - An necerta pasvorton ŝranko programo. Pasvortoj = { 'retpoŝtan': 'F7minlBDDuvMJuxESSKHFhTxFtjVB6', 'Blogo': 'VmALvQyKAxiVH5G8v01if1MLZF3sdt', Pakaĵojn ':' 12345 '} importado sys, pyperclip se len (sys.argv) <2: print ( 'Uzado: py pw.py [konto] - kopii kontan pasvorton') sys.exit () konto = sys.argv [1] # unua komandlinio arg estas la konto nomon se konto en Pasvortoj: pyperclip.copy (pasvortojn [konto]) print ( 'Pasvorto por' + konton + 'kopiitaj al interdeponejo.') alie: print ( 'Ne ekzistas konto nomita' + konto)
Ĉi nova kodo aspektas en la
PASSWORDS
vortaro por la konto nomon.
Se la konto nomon estas ŝlosila en la vortaro, ni preni la valoron
respondante al tiu klavo, kopii ĝin al la tondujo kaj presi mesaĝon
dirante ke ni kopiis la valoron. Alie, ni presi mesaĝon dirante ke estas negravaj kun tiu nomo.
Jen la kompleta skripto.
Uzante la instrukciojn en Apendico B por ĵeti komandlinio programoj
facile, vi nun havas rapidan manieron kopii vian konton pasvortojn al la
tondujo. Vi devos modifi la
PASSWORDS
vortaro valoro en la fonto kiam ajn vi volas ĝisdatigi la programon kun nova pasvorto.
Kompreneble, vi probable ne volas konservi ĉiujn viajn pasvortojn en unu loko kie iu povus facile kopii ilin. Sed vi povas modifi ĉi programo kaj uzi ĝin por rapide kopii regula teksto al la tondujo. Diru vi sendas plurajn retpoŝtojn kiuj havas multaj de la samaj valoroj alineoj komune. Vi povus meti ĉiu alineo kiel valoro en la
PASSWORDS
vortaro (vi volas probable volas renomi la vortaro ĉe tiu punkto), kaj
tiam vi havus vojon rapidan elekton kaj kopii unu el multaj normaj pecoj
de teksto al la tondujo.
En Windows, vi povas krei aron dosiero kuri ĉi programo kun la WIN -R Run fenestro. (Por pli pri batch dosieroj, vidu Apendico B.) Tajpu la sekva en la dosiero redaktoro kaj konservi la dosieron kiel pw.bat en la C: \ Windows dosierujo:
@ Py.exe C: \ Python34 \ pw.py% * @pause
Kun tiu batch dosieron kreita, kurante la pasvorte sekura programo sur Fenestroj estas nur demando de premi WIN -R kaj tajpadon
pw <account name>
. Projekto: Aldono Kugloj por Vikio Markup
Kiam redaktante Vikipedia artikolo, vi povas krei bula listo metante
ĉiun listeron sur ĝia propra linio kaj metante stelon en fronto. Sed diru vi havas vere granda lerta kiu vi volas aldoni kuglo punktoj. Vi povus simple tajpu tiuj steloj je la komenco de ĉiu linio, unu post alia. Aŭ vi povus aŭtomatigi ĉi tiun taskon kun mallonga Python skripton.
La bulletPointAdder.py
skripto ricevos la tekston de la tondujo, aldoni stelon kaj spacon al
la komenco de ĉiu linio, kaj tiam algluu tiun novan tekston al la
tondujo. Ekzemple, se mi kopiis la sekvan tekston (por la Vikipedia artikolo "Listo de Listoj de Listoj") al la tondujo:
Listoj de bestoj Listoj de akvario vivo Listoj de biologoj de aŭtoro mallongigo Listoj de kulturvarioj
kaj poste kuris la bulletPointAdder.py programo, la tondujo povus tiam enhavi la sekvajn:
* Listoj de bestoj * Listoj de akvario vivo * Listoj de biologoj de aŭtoro mallongigo * Listoj de kulturvarioj
Tiu stelo-prefiksita teksto pretas esti batitaj en Vikipedio kiel bula listo.
Paŝo 1: Kopiu kaj Alglui el la poŝo
Vi volas la bulletPointAdder.py programo fari la sekvajn:
- Alglui tekston de la tondujo
- Fari ion por ĝi
- Kopii la novan tekston al la tondujo
Tiu dua paŝo estas iom malfacila, sed paŝas 1 kaj 3 estas bela simpla: ili simple impliki la
pyperclip.copy()
kaj pyperclip.paste()
funkcioj. Nuntempe, ni nur skribos la parto de la programo kiu kovras paŝojn 1 kaj 3. Tajpu la sekvaj, ŝparante la programo kiel bulletPointAdder.py: #! python3 # BulletPointAdder.py - Aldonas Vikipedio kuglo punktoj al la komenco # De ĉiu linio de teksto en la tondujo. importado pyperclip teksto = pyperclip.paste () # TODO: Apartigu liniojn kaj aldoni steloj. pyperclip.copy (teksto)
La
TODO
komento estas recordatorio ke vi devus kompletigi tiun parton de la programo finfine. La sekva paŝo estas reale efektivigi tiu peco de la programo. Paŝo 2: Apartigu la Linioj de Teksto kaj Add Star
La alvoko al
pyperclip.paste()
redonas la tutan tekston sur la tondujo kiel unu granda ŝnuro. Se ni uzas la "Listo de Listoj de Listoj" Ekzemple, la ĉeno stokita en text
aspektus tiel: 'Listoj de bestoj \ nLists de akvario vivo \ nLists de biologoj de aŭtoro mallongigo \ nLists de kulturvarioj '
La
\n
linion karakteroj en ĉi ŝnuro kaŭzas ĝin esti montrata per multoblaj linioj kiam presita aŭ batitaj de la tondujo. Ekzistas multaj "linioj" en ĉi tiu ĉeno valoro. Vi volas aldoni stelon al la komenco de ĉiu de ĉi tiuj linioj.
Vi povus skribi kodon kiu serĉas ĉiu
\n
linion karaktero en la kordo kaj tiam aldonas la stelo nur post tio. Sed estus pli facile uzi la split()
metodo reveni listo de kordoj, unu por ĉiu linio en la originala ĉeno,
kaj poste aldoni la stelo al la fronto de ĉiu ŝnuro en la listo.
Fari vian programon aspektas kiel la sekvaj:
#! python3 # BulletPointAdder.py - Aldonas Vikipedio kuglo punktoj al la komenco # De ĉiu linio de teksto en la tondujo. importado pyperclip teksto = pyperclip.paste () # Separate liniojn kaj aldoni steloj. linioj = text.split ( '\ n') por i en gamo (len (linioj)): # buklo tra ĉiu indeksoj en la "linioj" lerta linioj [i] = '*' + linioj [i] # aldoni stelon al ĉiu ŝnuro en "linioj" lerta pyperclip.copy (teksto)
Ni fendi la tekston laŭ ĝia linifinojn por ricevi liston en kiu ĉiu ero estas unu linio de la teksto.Ni stoki la listo en
lines
kaj tiam buklo tra la erojn en lines
. Por ĉiu linio, ni aldonas stelon kaj spaco por la komenco de la linio. Nun ĉiu ŝnuro en lines
komenciĝas kun stelo.Paŝo 3: Aliĝu al la Modified Linioj
La
lines
listo nun enhavas modifita linioj kiuj komenciĝas per steloj. Sed pyperclip.copy()
atendas ununuran ĉenon valoro, ne listo de kordoj valoroj. Fari tiun solan ĉenon valoro, pasas lines
en la join()
metodo por akiri sola ŝnuro aliĝis el la listo de kordoj. Fari vian programon aspektas kiel la sekvaj:#! python3
# BulletPointAdder.py - Aldonas Vikipedio kuglo punktoj al la komenco
# De ĉiu linio de teksto en la tondujo.
importado pyperclip
teksto = pyperclip.paste ()
# Separate liniojn kaj aldoni steloj.
linioj = text.split ( '\ n')
por i en gamo (len (linioj)): # buklo tra ĉiu indeksoj pri "linioj" lerta
linioj [i] = '*' + linioj [i] # aldoni stelon al ĉiu ŝnuro en "linioj" lerta
teksto = '\ n'.join (linioj)
pyperclip.copy (teksto)
Kiam tiu programo kuras, ĝi anstataŭas la tekston sur la tondujo per teksto kiu havas steloj je la komenco de ĉiu linio. Nun la programo estas kompleta, kaj vi povas provi kurante ĝin kun teksto kopiitaj al la tondujo.
Eĉ
se vi ne bezonas aŭtomatigi ĉi specifa tasko, vi eble volas aŭtomatigi
alia speco de teksto manipulado, kiel ekzemple forigado malantaŭante
spacoj de la fino de linioj aŭ konvertanta teksto por majuskla aŭ
minuskla. Ajn viaj bezonoj, vi povas uzi la tondujo por enigo kaj eligo.
resumo
Teksto
estas ofta formo de datumoj, kaj Python venas kun multaj utilaj ŝnuro
metodoj prilabori la tekston stokita en ŝnuro valoroj. Vi uzos indeksado, rebanar, kaj ŝnuro metodojn en preskaŭ ĉiu Pitono programo vi skribas.
La programoj vi skribas nun ne ŝajnas tro kompleksa-ili ne havas grafikan uzanto interfacoj kun bildoj kaj coloridas tekston. Ĝis nun, vi montri tekston kun
print()
kaj lasanta la uzanto eniri teksto kun input()
. Tamen, la uzanto povas rapide eniri grandaj kvantoj de teksto tra la tondujo. Tiu kapablo disponigas utilajn avenuo por skribi programojn kiuj manipulas masivajn kvantojn de teksto. Tiuj teksto-bazitaj programoj por ne okulfrapaj fenestroj aŭ grafiko, sed ili povas akiri multan utilan laboron farita rapide.
Alia maniero por manipuli grandajn kvantojn de teksto legas kaj skribas dosierojn rekte de la malmola disko. Vi lernos kiel fari tion per Python en la sekva ĉapitro.
Ke preskaŭ kovras ĉiujn bazajn konceptojn de programado Python! Vi
devos daŭre lerni novajn konceptojn tra la resto de tiu libro, sed vi
jam scias sufiĉe por komenci skribi kelkajn utilajn programojn kiuj
povas aŭtomatigi taskojn. Vi eble ne kredas ke vi havas
sufiĉan Python scion fari aferojn kiel malŝarĝo retpaĝoj, ĝisdatigi
kalkultabeloj, aŭ sendi mesaĝojn de teksto, sed tie estas kie Python
moduloj enveni! Tiuj moduloj, skribitaj por aliaj programistoj, provizas funkciojn kiuj faras ĝin facila por vi por fari cxiujn tiujn aferojn. Do ni lernu kiel skribi reala programoj fari utilajn aŭtomatigitaj taskoj.
praktiko Demandoj
Q:
|
1. Kio estas eskapo karakteroj?
|
Q:
|
2. Kion la
\n kaj \t eskapi karakteroj reprezentas? |
Q:
|
3. Kiel vi metis
\ backslash karaktero en ĉeno? |
Q:
|
4. La kordoj valoro
"Howl's Moving Castle" estas valida ŝnuro. Kial ne ĝi estas problemo ke la sola citaĵo karaktero en la vorto Howl's ne eskapis? |
Q:
|
5. Se vi ne volas meti
\n en via ŝnuro, kiel vi povas skribi ŝnuro kun linifinojn en ĝi? |
Q:
|
6. Kion la sekvajn esprimojn taksi al?
|
Q:
|
7. Kion la sekvajn esprimojn taksi al?
|
Q:
|
8. Kion la sekvajn esprimojn taksi al?
|
Q:
|
9. Kio ĉeno metodoj povas uzi al dekstran pravigas, maldekstruloj pravigi kaj centro kordo?
|
Q:
|
10. Kiel vi povas eltondi spaceto karakteroj de la komenco aŭ fino de kordo?
|
praktiko Projekto
Por praktiko, skribi programon kiu faras la sekvan.
tablo Printer
Skribi funkcion nomis
printTable()
kiuj prenas liston de listoj de kordoj kaj vidigas ĝin en bone organizita tablo kun ĉiu kolumno dekstre pravigita. Supozi ke ĉiuj internaj listoj enhavos la sama nombro de kordoj. Ekzemple, la valoro povis aspekti jene:tableData = [[ 'pomojn', 'oranĝoj', 'ĉerizoj', 'banano'], [ 'Alico', 'Bob', 'Carol', 'Davido'], [ 'Hundoj', 'katoj', 'alko "," ansero']]
Via
printTable()
funkcio estus presi la sekvaj:pomoj Alico hundoj oranĝoj Bob katoj ĉerizoj Carol alko banano Davido ansero
Konsileto:
Your kodo unue devas trovi la plej longan ĉenon en ĉiu de la interna
listoj tiel ke la tuta kolumno povas esti sufiĉe larĝa por persvadi
ĉiujn kordojn. Vi povas stoki la maksimuma larĝo de ĉiu kolumno kiel listo de entjeroj. La
printTable()
funkcio povas komenci kun colWidths = [0] * len(tableData)
, kiu kreos liston enhavanta la sama nombro de 0
valoroj kiel la nombro de internaj listoj en tableData
. Tiel, colWidths[0]
ĝi povas stoki la larĝo de la plej longa ŝnuro en tableData[0]
, colWidths[1]
povas stoki la larĝo de la plej longa ŝnuro en tableData[1]
, ktp sur. Vi povas tiam trovi la plej granda valoro en la colWidths
listo por ekscii kio entjero larĝa pasi al la rjust()
ĉeno metodo.
Nenhum comentário:
Postar um comentário