Wir haben die grundlegenden Zeichenfolgenoperationen in Python zusammengefasst. Für erfahrene Leute mag es nicht genug sein, aber ...
(Ergänzung 2018.12.23: Die Syntax von print
wird mit Python3 kompatibel gemacht. Wenn der in Python2 kopierte und eingefügte Code nicht funktioniert, setzen Sie bitte from __future__ import print_function
am Anfang der Codeseite.)
Python-Zeichenfolgen sind unveränderlich. Selbst wenn Sie sie teilweise neu schreiben möchten, Es wird als neues String-Objekt zusammengestellt. Beispielsweise gibt eine Methode namens "replace", die eine Zeichenfolgenersetzung durchführt, ein anderes Zeichenfolgenobjekt mit dem ersetzten Inhalt zurück.
Verwenden Sie den Operator "+" für die Verkettung.
a = 'Python'
b = '2.7'
c = a + b
print(c) # => 'Python2.7'
Da es in der richtigen Reihenfolge verarbeitet wird, ist es auch dann in Ordnung, wenn Sie viel verbinden
a = 'Python'
b = ' is '
c = 'fancy'
print(a + b + c) # => 'Python is fancy'
Es gibt auch eine Technik zum Verbinden mit der Join-Methode und List / Taple.
Abgesehen davon ist Rubys join
die Array-Methode (die eine verkettete Zeichenfolge als Argument verwendet), und Pythons join
ist die str-Methode (die list / tuple als Argument verwendet), also das Gegenteil von Ruby's. Erfahrene Menschen müssen vorsichtig sein.
strings = ['dog', 'cat', 'penguin']
print(','.join(strings)) #=> 'dog,cat,penguin'
Wenn Sie denselben Inhalt wiederholen, geben Sie eine Ganzzahl mit dem Operator *
an, und eine Zeichenfolge, die die angegebene Anzahl von Malen wiederholt, wird generiert.
s = 'dog?'
print(s * 3) #=> 'dog?dog?dog?'
Es gibt drei Möglichkeiten, den Wert einer Variablen in eine Zeichenfolge zu erweitern. Vielleicht gibt es andere, die ich einfach nicht kenne.
'{0}, {1}'. Format ('Hallo', 'Welt')
(Hinweis) Ich bin mir über den genauen Namen des zweiten nicht sicher, aber ich habe beschlossen, ihn ohne Erlaubnis den erweiterten Sprintf-Stil zu nennen.
Wenn Sie der Zeichenfolge mit dem Operator "%" einen Wert oder eine Liste / ein Tupel zuweisen, kann diese wie folgt erweitert werden.
a = 'Python'
b = 'a programming language'
print('%s is %s' % (a, b)) # => 'Python is a programming language'
c = 'World'
print('Hello, %s!' % c) # => 'Hello, World!'
Sie müssen so viele Werte angeben, wie Erweiterungssymbole (z. B.% s) in der Zeichenfolge enthalten sind. Es kann nicht mehr oder weniger sein. Wenn es ein Erweiterungssymbol gibt, muss der Wert nach% nicht Liste / Tupel sein. (Es wird auch um eine Elementliste / ein Tupel erweitert.) Im obigen Beispiel enthält die Vorlagenzeichenfolge der ersten print-Anweisung zwei Erweiterungssymbole "% s", also die Anzahl der Elemente des Taples, die durch den Wert nach% angegeben wird Es gibt auch zwei. Wenn Sie das Zeichen "%" als Zeichen in der Vorlagenzeichenfolge behalten möchten, verwenden Sie "%%" und ** "%" 2 Zeichen **.
Es gibt die folgenden Formatspezifizierer. Wenn Sie sich nicht sicher sind, ist es möglicherweise eine gute Idee, diese vorerst auf "% s" zu setzen. Ich möchte erklären, wie der Formatbezeichner auf die Wikipedia-Seite von printf geschrieben wird.
--% s
- Als Zeichenfolge erweitern
--% d
- Als Ganzzahl erweitert
--% f
- Als Dezimalzahl erweitern
Wenn Sie möchten, dass der Taple oder die Liste als Zeichenfolge wie "(1, 2, 3)" erweitert wird
tuple_var = (1, 2, 3)
print('tuple_var is: %s' % (tuple_var,))
Wenn Sie dies nicht tun, werden Sie wütend, als ob nur ein Platzhalter ersetzt werden muss, obwohl es drei gibt!
Geben Sie den Schlüssel des diktierten Objekts in Klammern nach dem% der Formatzeichenfolge an und geben Sie das diktierte Objekt auf der rechten Seite des Operators% für die Formatzeichenfolge an. Dies ist nützlich, wenn Sie bereits eine Diktiervariable haben, wenn Sie denselben Wert wiederholt einbetten.
v = dict(first='Michael', family='Jackson')
print('He is %(first)s, %(first)s %(family)s.' % v)
Sie können die Vorlagensprache für die Formatmethode verwenden, indem Sie die Formatmethode verwenden.
print('{0}, {1}'.format('Hello', 'World')) #=> 'Hello, World'
Weitere Informationen finden Sie unter Formatspezifikation Mini-Sprachspezifikation.
s = 'Today is Monday.'
ss = s.replace('Monday', 'Sunday') #=> 'Today is Sunday.'
print(ss)
s2 = 'Hello Hello'
ss2 = s2.replace('Hello', 'Bye') #=> 'Bye Bye'Wenn Sie das dritte Argument nicht angeben, wird alles ersetzt
print(ss2)
s3 = 'World World'
ss3 = s3.replace('World', 'Hello', 1) #=> 'Hello World' #Geben Sie die Nummer an, die durch die dritte Nummer ersetzt werden soll
print(ss3)
Verwenden Sie die Untermethode des Pakets re (regulärer Ausdruck), um Zeichenfolgen nach einem bestimmten Muster zu ersetzen.
import re
s = 'Hello World'
print(re.sub(r"[a-z]", "A", s)) #=> 'HAAAA WAAAA'
s = 'abc'
n = 1 # 'a'Wollen
print(s[n-1]) #0 Zeichen am Basisindex abrufen
s2 = 'xyz'
print(s[-1]) # 'z'Letzter Charakter
s = "This is a pen."
n = 1
m = 4
print(s[n-1:n-1+m]) # 'This'
print(s[0:4]) # 'This'
print(s[-4:-1]) # 'pen'
Verwenden Sie find
. Wenn Sie rückwärts suchen möchten, können Sie rfind
verwenden.
find gibt die Zeichenfolgenposition ab 0 zurück, wenn die entsprechende Zeichenfolge gefunden wird, oder -1, wenn sie nicht gefunden wird.
s = 'abcabcabc'
index = s.find('b') #Index ist 1(2. Zeichen)
Sie können die Position angeben, an der die Suche mit dem zweiten Argument gestartet werden soll.
s = 'abcabcabc'
index = s.find('b', 2) #Index ist 4(5. Zeichen)
Sie finden alle Ziele in der Zeichenfolge mit dem folgenden Code.
s = 'abcabcabc'
target = 'b'
index = -1
while True:
index = s.find(target, index + 1)
if index == -1:
break
print('start=%d' % index)
Da der Zeichenfolgentyp auch ein Iterator ist, kann er wie folgt verarbeitet werden. Wenn Sie eine Liste von Zeichen möchten, können Sie list (strvalue)
verwenden.
for c in 'aiueo':
print(c)
print(list('hoge')) # => ['h', 'o', 'g', 'e']
Es kann eine Möglichkeit zum Extrahieren geben, während auf die Zeichen im Index verwiesen wird.
s = 'aiueo'
for i in range(len(s)):
c = s[i]
print(c)
Sie können "strip", "lstrip" und "rstrip" verwenden. strip ist eine Zeichenfolge, bei der Leerzeichen, Tabulatorzeichen und Zeilenumbrüche (\ r und \ n) an beiden Enden entfernt sind. lstrip wendet die gleiche Verarbeitung wie strip nur auf das linke Ende an. rstrip gibt die gleiche Verarbeitung zurück wie Strip, der nur am rechten Ende angewendet wird.
s = ' x '
print('A' + s.strip() + 'B') # => 'AxB'
print('A' + s.lstrip() + 'B') # => 'Ax B'
print('A' + s.rstrip() + 'B') # => 'A xB'
Es scheint, dass Sie rstrip
verwenden können. Wenn jedoch zwei Muster mit einem Leerzeichen und einem Zeilenumbruch am Ende vorhanden sind und Sie nur im Falle eines Zeilenumbruchs löschen möchten, müssen Sie das zu löschende Zeichen im Argument angeben.
line = 'hoge\n'
msg = line.rstrip() + 'moge'
print(msg) # => 'hogemoge'
with open('./test.txt') as fh:
for line in fh:
no_line_break_line = line.rstrip()
#Etwas tun
#Löschen Sie nur Zeilenumbrüche, ohne Leerzeichen zu löschen
line_with_space = 'line \n' #Ich möchte das Leerzeichen vor dem Zeilenumbruch nicht entfernen
print(line_with_space.rstrip('\n')) # => 'line '
Verwenden Sie die Methode Upper ()
.
print('hello'.upper()) # => 'HELLO'
Verwenden Sie die Methode "lower ()".
print('BIG'.lower()) # => 'big'
s = 'abc'
print('b' in s) #=> True
print('x' in s) #=> False
Sie können dies selbst tun, indem Sie die zuvor veröffentlichte Methode "find" verwenden. Es gibt jedoch eine praktische Methode namens "count".
s = 'aaabbc'
print(s.count('b')) #=> 2
v = 1
print(str(v))
print('%d' % v)
f = 1.234
print(str(f)) #=> '1.234'
print('%f' % f) #=> '1.234000'
Es gibt Zeiten, in denen Sie es als Zeichenfolge in einem Konvertierungs- oder Debugdruck ausdrücken möchten.
v = [1,2,3]
print(str(v)) #=> '[1, 2, 3]'
print('%s' % v) #=> '[1, 2, 3]'
Wenn Sie versuchen, ein Tupel mit "% s" anzuzeigen, interpretiert Python das angegebene Tupel als Werteliste für die Vorlage, und es wird eine Fehlermeldung angezeigt.
v = (1, 2, 3)
print(str(v)) #=> '(1, 2, 3)'Gutes Beispiel
print('%s' % v) #=> '(1, 2, 3)'Ich erwarte, aber ich bekomme einen TypeError
print('%s' % (v,)) #=> '(1, 2, 3)'Gutes Beispiel
Es ist auch gut, die Montage mit join
usw. zu versuchen.
v = [1,2,3]
print('<' + ('/'.join([ str(item) for item in v ])) + '>') #=> '<1/2/3>'
Gleiches gilt für das Tupelobjekt.
Es gibt Zeiten, in denen Sie es als Zeichenfolge in einem Konvertierungs- oder Debugdruck ausdrücken möchten.
v = dict(a=1, b=2)
print(str(v)) #=> "{'a': 1, 'b': 2}"
print('%s' % v) #=> "{'a': 1, 'b': 2}"
Sie können auch keys
, List Inclusion Notation und join
verwenden, um eine Zeichenfolge in einem Liner zu generieren.
v = dict(a=1, b=2)
print('<' + ', '.join([ '%s=%s' % (k, v[k]) for k in v.keys() ]) + '>') #=> '<a=1, b=2>'
Die aus einer Datei oder einem Socket gelesenen Daten (im Binärmodus geöffnet) sind so wie sie sind eine Byte-Zeichenfolge. Wenn Sie sie also nicht als Unicode-Zeichenfolge interpretieren, können Sie nicht in Zeicheneinheiten arbeiten. In der Python2-Serie (2.7 usw.) werden str (Byte-Zeichenfolge) und Unicode (Zeichenfolge) unterschieden. Es ist besser, die Zeichenfolge als Unicode-Objekt in der Szene zu behandeln, in der Mehrbyte-Zeichen für die Eingabe erwartet werden, z. B. für Webanwendungen. .. Verwenden Sie die Methode decode ()
, um eine Byte-Zeichenfolge als Unicode-Zeichenfolge mit der angegebenen Codierung zu interpretieren.
In der Python3-Serie ist der Typ "str" ein Zeichenfolgentyp (entspricht dem Unicode-Typ der Python2-Serie), und der Typ "bytes" ist ein Typ der Byte-Zeichenfolge (entspricht dem Str-Typ der Python2-Serie).
with open('utf8_content_file.txt', 'rb') as fh: #Binärmodus, weil es rb ist
byte_content = fh.read() #Lese alles,Byte-String an dieser Stelle
print len(byte_content) #Anzahl der Bytes
unicode_string = byte_content.decode('utf-8') # utf-Interpretiert als Folge von Zeichen mit 8 Codierungen
print len(unicode_string) #Wortzahl
Die Standardcodierung der Methode "decode ()" lautet "utf-8". Wenn Sie also wissen, dass die von Ihnen interpretierte Byte-Zeichenfolge UTF-8 ist, können Sie sie weglassen.
bytes_data = b'\xe3\x83\x90\xe3\x82\xa4\xe3\x83\x88\xe5\x88\x97'
print(bytes_data.decode()) # => 'Byte-String'
Die Codierungen, die häufig auf Japanisch verwendet werden, sind unten aufgeführt.
--utf_8
UTF-8 (Alias: utf-8`` U8`` utf8
cp65001
)
--shift_jis
Shift JIS (Alias: csshiftjis`` shiftjis`` sjis
s_jis
)
--cp932
Shift JIS (Extended Shift JIS) (auch bekannt als: 932`` ms932`` mskanji
mks-kanji
)
--euc_jp
EUC-JP (auch bekannt als eucjp
ujis`` u-jis
)
Weitere von Python unterstützte Codierungen finden Sie auf der Paketseite "Codecs": https://docs.python.org/ja/3/library/codecs.html
Umgekehrt muss die Zeichenfolge beim Schreiben in eine Datei oder einen Socket (im Binärmodus geöffnet) eine Bytezeichenfolge sein. Verwenden Sie in diesem Fall die Methode encode () des Unicode-Objekts.
unicode_string = u'Multi-Byte-Zeichenfolge'
with open('./utf8_content_file.txt', 'wb') as fh: #Schreiben+Im Binärmodus öffnen
byte_content = unicode_string.encode('utf-8') # utf-Holen Sie sich die Byte-Zeichenfolge, wenn sie in 8 Codierungen ausgedrückt wird
fh.write(byte_content) #Schreiben Sie eine Byte-Zeichenfolge
Wenn die Methode "encode ()" die Codierung ebenfalls nicht übergibt, verhält sie sich so, als ob sie "utf-8" übergeben wurde.
str_data = 'Byte-String'
print(str_data.encode()) # => b'\xe3\x83\x90\xe3\x82\xa4\xe3\x83\x88\xe5\x88\x97'
Die Template-Engine ist so funktionsreich, dass wir hier nur einige wichtige Bibliotheken behandeln.
Ist jinja2 das wichtigste?
Recommended Posts