Python-String-Manipulations-Master

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-String = unveränderlich

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.

Verknüpfen

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'

Wiederholung

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?'

Werteinbettung

Es gibt drei Möglichkeiten, den Wert einer Variablen in eine Zeichenfolge zu erweitern. Vielleicht gibt es andere, die ich einfach nicht kenne.

  1. Sprint-Stil: "% s,% s"% ("Hallo", "Welt")
  2. Erweiterter Sprint-Stil:% (a) s,% (b) s% dict (a = 'Hallo', b = 'Welt') `
  3. Verwenden Sie die Formatmethode: '{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.

Sprint-Stil

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!

Erweiterter Sprintf-Stil

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)

Verwendung der Formatmethode

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.

Ersetzen

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'

Holen Sie sich das N-te Zeichen

s = 'abc'
n = 1  # 'a'Wollen
print(s[n-1])  #0 Zeichen am Basisindex abrufen

s2 = 'xyz'
print(s[-1])  # 'z'Letzter Charakter

Teilzeichenfolge abrufen (M-Zeichen aus dem N-ten Zeichen entfernen)

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'

Suche

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)

Verarbeiten Sie jeweils ein Zeichen

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)

Leerzeichen an beiden Enden entfernen

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'

Zeilenumbrüche löschen (Verarbeitung entspricht Perl und Ruby Chomp)

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 '

Machen Sie alles Kapital

Verwenden Sie die Methode Upper ().

print('hello'.upper())  # => 'HELLO'

Mach alles niedriger

Verwenden Sie die Methode "lower ()".

print('BIG'.lower())  # => 'big'

Finden Sie heraus, ob eine Zeichenfolge als Teilzeichenfolge enthalten ist

s = 'abc'
print('b' in s)  #=> True
print('x' in s)  #=> False

Zählen Sie, wie oft eine Zeichenfolge als Teilzeichenfolge angezeigt wird

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

Konvertiere int in string

v = 1
print(str(v))
print('%d' % v)

Float in String konvertieren

f = 1.234
print(str(f))  #=> '1.234'
print('%f' % f)  #=> '1.234000'

Liste in Zeichenfolge konvertieren, Tupel in Zeichenfolge konvertieren

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.

Dikt in String konvertieren

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>'

Machen Sie Bytes zu einer Unicode-Zeichenfolge

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

Machen Sie die Unicode-Zeichenfolge in Bytes

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'

Verwenden Sie die Template-Engine

Die Template-Engine ist so funktionsreich, dass wir hier nur einige wichtige Bibliotheken behandeln.

Ist jinja2 das wichtigste?

Referenzlink

Recommended Posts

Python-String-Manipulations-Master
String-Manipulation in Python
Python-String
Datumsmanipulation von Strings in Python
Python-String-Format
Manipulation von Python-Syntaxzeichenfolgen
Python String Slice
Python2-Zeichenfolgentyp
Python-String-Format
Python # String-Typ
Python-String-Inversion
Python-Listenmanipulation
Python Node.js Zeichenmanipulation
Datumsmanipulation in Python
Kontrast zur Manipulation von Java-Python-Strings
[Python2] Datumszeichenfolge → UnixTime → Datumszeichenfolge
Zufällige String-Generierung (Python)
Python3> Dokumentationszeichenfolge / Dokumentzeichenfolge
Abbildung zur Verarbeitung von Python-Zeichenfolgen
String-Manipulation mit Python & Pandas, die ich oft benutze
Ziel Python Library Master (48) Autopep8
Ziel Python Library Master (36) json2html
Ziel Python-Master (49) psidialogs
Ziel Python Library Master (26) easyxml
Ziel Python Library Master (29) table_printer
Zielen Sie auf die Namespaces des Python Library Master (55)
Ziel Python Library Master (46) Browserplus
[Python] Datum in Zeichenfolge konvertieren
Ziel Python Library Master (30) Chronyk
Python-Einzug und String-Format
Ziel Python Library Master (3) Arbeitskalender
Ziel Python Library Master (37) Slimurl
Ziel Python Library Master (44) Pynetviz
Ziel Python Library Master (8) Rolex
Ziel Python Library Master (52) Marktime
Ziel Python Library Master (7) Numparser
String-Objektmethoden in Python
Ziel Python Library Master (21) hy
Richten Sie die Anforderungen des Python Library Master (18) aus
[Python] Verwenden Sie eine Zeichenfolgenfolge
Ziel Python Library Master (13) easydev
Ziel Python Library Master (20) Pyyaml
Zielen Sie gleichzeitig auf den Python-Bibliotheksmaster (34)
Ziel ist die Wortsegmentierung des Python Library Master (40)
Ziel Python Library Master (43) cpmoptimize
Ziel Python Library Master (68) Pazudorasolver
Ziel Python Library Master (58) Fälscher
Ziel Python Library Master (11) nlist
Ziel Python Library Master (38) beautiful_print
Verschiedene String-Operationen in Python integriert
Ziel Python Library Master (65) Geopy
Ziel Python Library Master (2) Vincent
Zielen Sie auf das Logbuch des Python Library Master (59)
Ziel Python Library Master (51) Pyautogui
Ziel Python Library Master (10) Timeit
Ziel Python Python Master (0) Links
Ziel Python Library Master (66) youtube-dl
Ziel Python Library Master (53) Psutil
Ziel Python Library Master (22) htmltag