English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
I. Wie teilt man einen String mit mehreren Trennzeichen?
Fallstudie
Wir müssen einen String basierend auf Trennzeichen in verschiedene Zeichenabschnitte teilen, der String enthält verschiedene Trennzeichen, zum Beispiel:
s = 'asd;aad|dasd|dasd,sdasd|asd,,Adas|sdasd;Asdasd,d|asd'
Wo sind <,>,<;>,<|>,<\t> als Trennzeichen, wie sollen sie behandelt werden?
Lösung
Verwenden Sie die split()-Methode hintereinander, um jeden Trennzeichen einmal zu verarbeiten
# Verwenden Sie Python2 def mySplit(s,ds): res = [s] for d in ds: t = [] map(lambda x: t.extend(x.split(d)), res) res = t return [x for x in res if x] s = 'asd;aad|dasd|dasd,sdasd|asd,,Adas|sdasd;Asdasd,d|asd' result = mySplit(s, ';,|\t') print(result)
C:\Users\Administrator>C:\Python\Python27\python.exe E:\python-intensiv-training\s2.py ['asd', 'aad', 'dasd', 'dasd', 'sdasd', 'asd', 'Adas', 'sdasd', 'Asdasd', 'd', 'asd']
>>> import re >>> re.split('[,;\t|]+','asd;aad|dasd|dasd,sdasd|asd,,Adas|sdasd;Asdasd,d|asd' ['asd', 'aad', 'dasd', 'dasd', 'sdasd', 'asd', 'Adas', 'sdasd', 'Asdasd', 'd', 'asd']
Zwei, wie kann man bestimmen, ob die Zeichenkette a mit der Zeichenkette b beginnt oder endet?
Fallstudie
Wenn ein Verzeichnis wie folgt enthält:
quicksort.c graph.py heap.java install.sh stack.cpp ......
Jetzt müssen wir den ausführbaren Berechtigungen für Verzeichnisse mit Endung .sh und .py hinzufügen
Lösung
Verwenden Sie die Methoden startswith() und endswith() der Zeichenkette
>>> import os, stat >>> os.listdir('./) ['heap.java', 'quicksort.c', 'stack.cpp', 'install.sh', 'graph.py'] >>> [name for name in os.listdir('./) if name.endswith(('.sh','.py'))] ['install.sh', 'graph.py'] >>> os.chmod('install.sh', os.stat('install.sh').st_mode | stat.S_IXUSR)
[root@iZ28i253je0Z t]# ls -l install.sh -rwxr--r-- 1 root root 0 Sep 15 18:13 install.sh
Drei, wie kann man das Format des Textes in einer Zeichenkette anpassen?
Fallstudie
Ein Logdatei einer bestimmten Software, bei der das Datumformat yyy ist-mm-dd:
2016-09-15 18:27:26 statu unpacked python3-pip:all 2016-09-15 19:27:26 status halb-konfiguriert python3-pip:all 2016-09-15 20:27:26 status installiert python3-pip:all 2016-09-15 21:27:26 konfigurieren asdasdasdas:all python3-pip:all
Es muss das Datum in das amerikanische Datumformat mm geändert werden/dd/yyy, 2016-09-15 --> 09/15/2016, wie soll man das behandeln?
Lösung
Verwenden Sie die Methode re.sub() der regulären Ausdrücke zum ersetzen von Zeichenketten
Mit Hilfe der K捕获gruppen der regulären Ausdrücke, erfassen Sie den Inhalt jeder Teil, und ordnen Sie die K捕获gruppen in der ersetzenen Zeichenkette an.
>>> log = '2016-09-15 18:27:26 statu unpacked python3-pip:all' >>> import re # 按顺序 >>> re.sub('(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1' , log) '09/15/2016 18:27:26 statu unpacked python3-pip:all' # Using regular expression grouping >>> re.sub('(?P<year>\d{4})-(?P<month>\d{2})-(ɸ})', r'\g<month>/\g<day>/\g<year>' , log) '09/15/2016 18:27:26 statu unpacked python3-pip:all'
IV, how to concatenate multiple small strings into a large string?
Fallstudie
When designing a network program, we have customized a network protocol based on UDP, and passed a series of parameters to the server in a fixed order:
hwDetect: "<0112>" gxDepthBits: "<32>" gxResolution: "<1024x768>" gxRefresh: "<60>" fullAlpha: "<1>" lodDist: "<100.0>" DistCull: "<500.0>"
In the program, we collect all the parameters in order into a list:
["<0112>","<32>","<1024x768>","<60>","<1>","<100.0>","<500.0>"]
Finally, we need to concatenate all the parameters into a data packet to send:
"<0112><32><1024x768><60><1><100.0><500.0>"
Lösung
Iterate the list, using the 'operation continuously+'operation to concatenate each string
>>> for n in ["<0112>","<32>","<1024x768>","<60>","<1>","<100.0>","<500.0>"]: ... result += n ... >>> result '<0112><32><1024x768><60><1><100.0><500.0>'
Using the str.join() method, it is faster to concatenate all strings in the list
>>> result = ''.join(["<0112>","<32>","<1024x768>","<60>","<1>","<100.0>","<500.0>"]) >>> result '<0112><32><1024x768><60><1><100.0><500.0>'
If there are numbers in the list, you can use a generator for conversion:
>>> hello = [222',sd',232,'2e',0.2] >>> ''.join(str(x) for x in hello) '222sd2322e0.2'
V, how to align strings to the left, right, and center?
Fallstudie
In some dictionary, a series of attribute values are stored:
{ 'ip':'127.0.0.1', 'blog': 'www.anshengme.com', 'title': 'Hello world', 'port': '80' }
In the program, we want to output the content in the following format, how to deal with it?
ip : 127.0.0.1 blog : www.anshengme.com title : Hello world port : 80
Lösung
Verwenden Sie die Methode str.ljust() , str.rjust, str.center() für die links- und zentrierte Ausrichtung der Zeichenkette
>>> info = {'ip':'127.0.0.1','blog': 'www.anshengme.com','title': 'Hello world','port': '80'} # Erhalten Sie die Länge der keys im Dictionary maximal >>> max(map(len, info.keys())) 5 >>> w = max(map(len, info.keys())) >>> for k in info: ... print(k.ljust(w), ':',info[k]) ... # Das erhaltene Ergebnis Port : 80 Blog: www.anshengme.com IP : 127.0.0.1 Titel: Hello world
Verwenden Sie die Methode format(), um ähnliche Werte wie '<20','>20','^20'Parameter erfüllen die gleiche Aufgabe
>>> for k in info: ... print(format(k,'^'+str(w)), ':',info[k]) ... Port : 80 Blog: www.anshengme.com IP : 127.0.0.1 Titel: Hello world
Sechstens, wie kann man ungewollte Zeichen in einer Zeichenkette entfernen?
Fallstudie
Filtern Sie die zusätzlichen Leerzeichen nach dem Eingeben des Benutzers: [email protected]
Filtern Sie das überflüssige Leerzeichen nach dem Bearbeiten des Textes unter Windows: hello word\r\n
Entfernen Sie die Unicode-Kombinationszeichen (Tönung) im Text: ‘ní hǎo, chī fàn'
Lösung
Die Methoden strip(), lstrip(), rstrip() der Zeichenkette entfernen die Zeichen an den Enden der Zeichenkette
>>> email = ' [email protected] ' >>> email.strip() '[email protected]' >>> email.lstrip() '[email protected] ' >>> email.rstrip() ' [email protected]' >>>
Um ein festgelegtes Zeichen an einer bestimmten Position zu löschen, können Sie den Schnitt verwenden+Methode zum Kombinieren
>>> s[:3] + s[4:] 'abc123'
Der replace() -Methode der Zeichenkette oder die reguläre Ausdrucksbedingung re.sub() löschen Sie Zeichen an jeder Position
>>> s = '\tabc\t'123\txyz' >>> s.replace('\t', '') 'abc'123xyz'
Verwenden Sie re.sub() zum Entfernen mehrerer
>>> import re >>> re.sub('[\t\r]','', string) 'abc123xyzopq'
Der String-Methoden translate() kann gleichzeitig mehrere verschiedene Zeichen löschen
>>> import string >>> s = 'abc123xyz' >>> s.translate(string.maketrans('abcxyz','xyzabc')) 'xyz123abc'
>>> s = '\rasd\t23\bAds' >>> s.translate(None, '\r\t\b') 'asd23Ads'
# python2.7 >>> i = u'ní hǎo, chī fàn' >>> i u'ni\u0301 ha\u030co, chi\u0304 fa\u0300n' >>> i.translate(dict.fromkeys([0x0301, 0x030c, 0x0304, 0x0300])) u'ni hao, chi fan'
Zusammenfassung
Dies ist eine Zusammenfassung der Techniken zur Verarbeitung von Strings in Python, die durch Beispiele, Lösungen und Beispiele demonstriert werden, wie man Probleme löst, die für das Lernen oder die Verwendung von Python eine gewisse Referenz- und Anschauungswert haben. Wer es benötigt, kann es als Referenz und Anschauung verwenden.
Interessierte Leser, die mehr über Python erfahren möchten, können die Themenbereiche dieser Website besuchen: "Zusammenfassung der Techniken zur String-Operation in Python", "Zusammenfassung der Techniken zur Kodierung in Python", "Zusammenfassung der Techniken zur Bildoperation in Python", "Lehrbuch zur Datenstruktur und Algorithmen in Python", "Zusammenfassung der Techniken zur Socket-Programmierung in Python", "Zusammenfassung der Techniken zur Verwendung von Funktionen in Python", "Klassisches Lehrbuch für den Einstieg und die Vertiefung in Python" sowie "Zusammenfassung der Techniken zur Datei- und Verzeichnisoperation in Python"