English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Python中字符串的处理技巧分享

I. Comment diviser une chaîne de caractères contenant plusieurs symboles de séparation ?

Cas pratique

Nous devons diviser une chaîne de caractères en différents segments en fonction des symboles de séparation, la chaîne de caractères contient plusieurs types de symboles de séparation, par exemple :

s = 'asd;aad|dasd|dasd,sdasd|asd,,Adas|sdasd;Asdasd,d|asd'

Où traiter les séparateurs <,>,<;>,<|>,<\t>?

Solution

Utiliser en continu la méthode split() pour traiter un séparateur à chaque fois

# Utiliser 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-intensive-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']

Deuxième partie : Comment déterminer si une chaîne a un début ou une fin spécifique ?

Cas pratique

Par exemple, les fichiers dans un répertoire donné sont les suivants :

quicksort.c graph.py heap.java install.sh stack.cpp ......

Il faut donner les permissions exécutables aux fichiers.sh et .py

Solution

Utiliser les méthodes startswith() et endswith() des chaînes

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

Troisième partie : Comment ajuster le format des textes dans une chaîne ?

Cas pratique

Les fichiers journaux d'un logiciel, où le format de la date est yyy-mm-dd:

2016-09-15 18:27:26 statu unpacked python3-pip:all 2016-09-15 19:27:26 statu half-configured python3-pip:all 2016-09-15 20:27:26 statu installd python3-pip:all 2016-09-15 21:27:26 configure asdasdasdas:all python3-pip:all

Il faut changer la date en format américain mm/dd/yyy, 2016-09-15 --> 09/15/2016, comment le traiter ?

Solution

Utiliser la méthode de remplacement de chaîne re.sub() de l'expression régulière

Utiliser les groupes de capture de l'expression régulière pour capturer chaque contenu partie, dans l'ordre des groupes capturés dans la chaîne de remplacement.

>>> 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' # Utilisation des groupes de l'expression régulière >>> 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'

Quatrièmement, comment concaténer plusieurs petites chaînes de caractères en une grande chaîne ?

Cas pratique

Lors de la conception d'un programme réseau certain, nous avons défini un protocole réseau basé sur UDP, transmettant une série de paramètres en ordre fixe au serveur :

hwDetect: "<0112>" gxDepthBits: "<32>" gxResolution: "<1024x768>" gxRefresh: "<60>" fullAlpha: "<1>" lodDist: "<100.0>" DistCull: "<500.0>"

Dans le programme, nous collectons les paramètres en ordre dans une liste :

["<0112>","<32>","<1024x768>","<60>","<1>","<100.0>","<500.0>"]

Finalement, nous devons assembler tous les paramètres en un paquet pour l'envoi :

"<0112><32><1024x768><60><1><100.0><500.0>"

Solution

Itérer une liste, en utilisant plusieurs fois '+Enchaîner chaque chaîne de caractères à l'aide de l'opérateur '

>>> for n in ["<0112>","<32>","<1024x768>","<60>","<1>","<100.0>","<500.0>"]: ... result += n ... >>> result '<0112><32><1024x768><60><1><100.0><500.0>'

L'utilisation de la méthode str.join() permet de concaténer plus rapidement tous les chaînes de caractères d'une liste

>>> result = ''.join(["<0112>","<32>","<1024x768>","<60>","<1>","<100.0>","<500.0>"]) >>> result '<0112><32><1024x768><60><1><100.0><500.0>'

Si une liste contient des nombres, vous pouvez utiliser un générateur pour les convertir :

>>> hello = [222,'sd',232,'2e',0.2] >>> ''.join(str(x) for x in hello) '222sd2322e0.2'

Cinquièmement, comment aligner une chaîne de caractères à gauche, à droite et au centre ?

Cas pratique

Un certain dictionnaire contient une série de valeurs d'attributs :

{ 'ip':'127.0.0.1', 'blog': 'www.anshengme.com', 'title': 'Hello world', 'port': '80' }

Dans le programme, nous souhaitons afficher le contenu avec le format suivant, comment faire ?

ip : 127.0.0.1 blog : www.anshengme.com title : Hello world port : 80

Solution

Utiliser str.ljust() , str.rjust, str.center() pour aligner à droite et à gauche

>>> info = {'ip':'127.0.0.1','blog': 'www.anshengme.com','title': 'Hello world','port': '80'} # Obtenir la longueur maximale des clés du dictionnaire >>> max(map(len, info.keys())) 5 >>> w = max(map(len, info.keys())) >>> for k in info: ... print(k.ljust(w), ':',info[k]) ... # Obtenir le résultat port : 80 blog : www.anshengme.com ip : 127.0.0.1 title : Hello world

Utiliser la méthode format(), transmettre un semblable '<20','>20','^20'paramètre accompli la même tâche

>>> for k in info: ... print(format(k,'^'+str(w)), ':',info[k]) ... port : 80 blog : www.anshengme.com ip : 127.0.0.1 title : Hello world

VI. Comment supprimer les caractères inutiles dans une chaîne ?

Cas pratique

Filtrer les caractères blancs supplémentaires après l'entrée de l'utilisateur : [email protected]

Filtrer le '\r' dans le texte édité sous Windows : hello word\r\n

Supprimer les symboles de combinaison unicode (intonation) dans le texte : ‘ní hǎo, chī fàn'

Solution

Les méthodes de chaîne strip(), lstrip(), rstrip() pour supprimer les caractères aux extrémités de la chaîne

>>> email = ' [email protected] ' >>> email.strip() '[email protected]' >>> email.lstrip() '[email protected] ' >>> email.rstrip() ' [email protected]' >>>

Pour supprimer un caractère à une position fixe, utilisez les tranches+méthode de concaténation

>>> s[:3] + s[4:] 'abc123'

La méthode replace() de la chaîne ou l'expression régulière re.sub() pour supprimer des caractères à n'importe quelle position

>>> s = '\tabc\t'123\txyz' >>> s.replace('\t', '') 'abc123xyz'

Utilisation de re.sub() pour supprimer plusieurs

>>> import re >>> re.sub('[\t\r]','', string) 'abc123xyzopq'

La méthode translate() de la chaîne peut supprimer plusieurs types de caractères différents

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

Résumé

Voici les astuces de manipulation des chaînes de caractères en Python que nous avons rassemblées. Le texte démontre comment résoudre les problèmes à l'aide d'exemples, de solutions et d'instances, ce qui peut être une référence utile pour l'apprentissage ou l'utilisation de python. Vous pouvez le consulter et l'utiliser selon vos besoins.

Pour ceux qui sont intéressés par plus de contenu sur Python, vous pouvez consulter les sujets spéciaux de ce site : "Recueil des astuces de manipulation des chaînes de caractères Python", "Résumé des astuces de codage Python", "Résumé des astuces de manipulation des images Python", "Tutoriel des structures de données et algorithmes Python", "Résumé des astuces de programmation Socket Python", "Résumé des astuces d'utilisation des fonctions Python", "Tutoriel classique d'entrée et de niveau supérieur Python" et "Résumé des astuces de manipulation des fichiers et dossiers Python".