Extrait de code Python
Formatage et strings
Utiliser les noms des variables pour formater les strings
prefix = "HAHA"
attr = "HOHO"
print "{prefix}{attr}".format(**locals())
Depuis Python 3.6, vous pouvez le faire avec :
prefix = "HAHA"
attr = "HOHO"
print(f"{prefix}{attr}")
Convertir des lettres UTF-8 en leur équivalent ASCII
>>> import unicodedata
>>> unicodedata.normalize('NFKD', u'ö').encode('ascii', 'ignore')
'o'
Source : How to replace unicode characters by ascii characters in Python (perl script given)?
Iterateurs
Voici quelques itérateurs utiles, absents du module itertools.
Itérer par paquets de N éléments dans une liste données
Permet de générer les frame ranges des jobs d’un ferme de rendu (par exemple: génération des RIBs).
Le motif est :ABCDEF
-> AB, CD, EF
def chunck(l, n):
return (l[i:i+n] for i in xrange(0, len(l), n))
>>> list(chunck(range(16),3))
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14], [15]]
Glissement par paire
Utile pour organiser une liste de nœuds connectés à l’intérieur d’un graphe.
Le motif est :ABCDEF
-> AB, BC, CD, DE, EF
import itertools
def pair_slide(l):
return itertools.izip(l, l[1:])
>>> list(pair_slide("ABCDEF"))
[('A', 'B'), ('B', 'C'), ('C', 'D'), ('D', 'E'), ('E', 'F')]
Système
Alternative à psutil (Linux)
import os
def process_info():
for out in os.popen('ps --no-headers -eo pid:1,user,command'):
pid, user, cmd = out.rstrip('\n').split(' ', 2)
pid = int(pid)
yield pid, user, cmd
Mettre à jour de cache NFS
def update_nfs_cache(path):
"""Update NFS cache to given file path.
Args:
path (str): Path to update.
"""
splitted = path.replace('\\', '/').split('/')
path_aggregated = splitted.pop(0)
for item in splitted:
path_aggregated = '/'.join((path_aggregated, item))
try:
os.listdir(path_aggregated)
except OSError:
# not a dir, so it's a file, force stats
try:
os.stat(path_aggregated)
except OSError: # file doesn't exists
continue
Autres
Profilage
import cProfile, pstats, StringIO
pr = cProfile.Profile()
pr.enable()
# your code
pr.disable()
s = StringIO.StringIO()
ps = pstats.Stats(pr, stream=s).sort_stats('cumulative')
ps.print_stats(0.1) # 0.1 for only first 10% lines
print(s.getvalue())
Plus d’informations dans la documentation de pstats.Stats().
Générer et exécuter dynamiquement des commandes Bash en Python
Cela peut être utile pour appeler des fonctions Python modifiant l’environnement du shell courant. Par exemple, pour définir des variables d’environnement après les avoir récupérées en Python.
La commande Bash est la suivante :
eval "$(python print_bash_stuff.py)"
Le fichier print_bash_stuff.py
ne fait qu’imprimer dynamiquement des commandes Bash :
print 'function test {\n echo "toto"\n}\n'
print 'FOO=BAR\n'
Ce qui nous donne :
$ eval "$(python print_bash_stuff.py)"
$ test
toto
$ echo $FOO
BAR
Dernière mise à jour : dim. 22 novembre 2020