Table des matières

,

Draft Python3

List comprehensions and generator expressions

(short form: “listcomps” and “genexps”)

line_list = ['  line 1\n', 'line 2  \n', ' \n', '']
 
# Generator expression -- returns iterator
stripped_iter = (line.strip() for line in line_list)
 
# List comprehension -- returns list
stripped_list = [line.strip() for line in line_list]
 
stripped_list = [line.strip() for line in line_list if line != ""]

Autres

def inc(f, id):
    """ Exemple : inc(lambda x : x+1, 0) """
    try :
        global counter
        counter = f(counter)
    except NameError:
        counter = 0
    return counter

http://mgautier.fr/blog/Astuce/changer-lenvironnement-bash-avec-python.html


List unique remove duplicate

Source : http://stackoverflow.com/questions/89178/in-python-what-is-the-fastest-algorithm-for-removing-duplicates-from-a-list-so

def unique(items):
    found = set([])
    keep = []
    for item in items:
        if item not in found:
            found.add(item)
            keep.append(item)
    return keep

How do you split a list into evenly sized chunks in Python?

Source : http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in-python

def chunks(l, n):
    n = max(1, n)
    return [l[i:i + n] for i in range(0, len(l), n)]

Determine if variable is defined in Python

http://stackoverflow.com/questions/1592565/determine-if-variable-is-defined-in-python

try:
  thevariable
except NameError:
  print "well, it WASN'T defined after all!"
else:
  print "sure, it was defined."

I think it's better to avoid the situation. It's cleaner and clearer to write:

a = None
if condition:
    a = 42

Getting file size in Python

http://stackoverflow.com/questions/6591931/getting-file-size-in-python

def get_Size(file):
    file.seek(0,2) # move the cursor to the end of the file
    size = file.tell()
    return size

Exemple :

with open('plop.bin','rb') as file:
    size=get_Size(file)
 
with open('plop.bin','rb') as file:
    #size=get_Size(file)
    for i in range(size):
        un, deux = read_hexafile()
        msg.append(un)
        msg.append(deux)

/dev/null

fnull = open(os.devnull, 'w')

Message d'erreur

How to print to stderr in Python?

http://stackoverflow.com/questions/5574702/how-to-print-to-stderr-in-python

def warning(*objs):
    print(*objs, file=sys.stderr)

Conversion hexa

import numpy as np
 
carac=re.sub('^','0x',carac)
carac= int(carac, 16)
print(carac)
file.write(np.byte(carac))
 
 
with open('plop.bin', 'bw') as file:
        file.write(b'\x50\x40\x73')
 
 
hex(11) # '0xb'
 
a = int('0x100', 16)
print(a)   #256
print('%x' % a) #100
 
import binascii
binascii.unhexlify('7061756c')  # b'paul'
 
"{0:8b}".format(int("a",16))    # '    1010'

http://stackoverflow.com/questions/16843108/how-to-read-a-hex-file-into-numpy-array

with open(myfile) as f:
    iv = binascii.unhexlify(f.readline().strip())
    key = binascii.unhexlify(f.readline().strip())
    count = int(f.readline())
    a = np.fromiter((binascii.unhexlify(line.strip()) for line in f), dtype='|S16')
hashlib.sha512('Bonjour'.encode('utf-8')).hexdigest()
hex(int.from_bytes('Bonjour'.encode('utf-8'), 'big'))

Créer un Dictionnaire à partir de deux listes (l'une clef, l'autre valeur)

clef = ['a', 'b', 'c']
valeur = [1, 2, 3]
dictionnaire=dict(zip(clef, valeur))

Test

Voir :

Exception

http://stackoverflow.com/questions/16138232/is-it-a-good-practice-to-use-try-except-else-in-python

try:
    s   
except NameError:
    pass
else: # If no exception occured, do :
    s.user.logout()

Temps / time

Voir :

start = time.time()
UnifiedJob.objects.filter(id=1096679).update(status='canceled')
end = time.time()
 
print(end - start)

Strings

https://zerokspot.com/weblog/2015/12/31/new-string-formatting-in-python/

Debug

Source : https://www.geekarea.fr/wordpress/?p=763

Level 1

f = open('/tmp/debug','a')
f.write(variable + '\n')
f.close()

Level 2

from pprint import pprint
pprint(variable.__class__.__name__, f)
pprint(dir(variable), f)
pprint(vars(variable), f)

Level 3 (sur une exception)

import traceback
f.write(str(traceback.format_exc()))

map reduce filter

Voir :

Aures

A noter que sur RedHat 8 le chemin vers python est /usr/libexec/platform-python