This is a collaborative space. In order to contribute, send an email to maximilien.chaumon@icm-institute.org
On any page, type the letter L on your keyboard to add a "Label" to the page, which will make search easier.

Python

There are tons of resources to learn Python online. Here is not the place to list them all.

Search "learn python" or something similar in your favorite search engine. You'll find something.

The MNE-python website has a few resources.

 

Below is some old content you may find useful. This is also about linux shell environment.

Introduction

Le script :read_powers.py| lit le contenu d'un fichier et recopie une partie des données dans un autre fichier. Les noms des fichiers d'entrée et de sortie sont passés en argument du script.
Par défaut, un script n'est pas executable et "x", pour exécutable, n'apparait pas lors de la commande "ls -l":

[jd@lena55 tmp]$ ls -l read_powers.py
-rw-r--r-- 1 jd jd 1653 Apr  8 18:56 read_powers.py

Pour rendre le script executable et faire apparaitre le "x":

[jd@lena55 tmp]$ chmod +x read_powers.py
[jd@lena55 tmp]$ ls -l read_powers.py
-rwxr-xr-x 1 jd jd 1653 Apr  8 18:56 read_powers.py

Pour exécuter le script, il faut spécifier en arguments le nom du fichier d'entrée :data.txt| et le nom du fichier de sortie à créer:

[jd@lena55 tmp]$ ./read_powers.py data.txt output.txt
Electrodes: Fp1, Fp2, F7, F3, Fz, F4, F8, FC5, FC1, FC2, FC6, T7, C3, Cz, C4, T8, CP5, CP1, CP2, CP6, P7, P3, Pz, P4, P8, PO3, PO4, O1, O2
Powers: 2.528e-10, 2.216e-10, 1.193e-09, 4.046e-10, 2.065e-10, 3.509e-10, 8.046e-10, 8.916e-10, 7.303e-10, 9.752e-10, 7.08e-10, 1.05e-09, 1.112e-09, 1.725e-09, 1.192e-09, 9.156e-10, 1.417e-09, 1.746e-09, 1.953e-09, 1.416e-09, 1.975e-09, 1.863e-09, 2.421e-09, 2.005e-09, 1.843e-09, 2.231e-09, 2.393e-09, 2.044e-09, 2.181e-09
Règles de base
  • Il est recommandé d'utiliser l'extension ".py" pour identifier les fichiers contenant du code python
  • Il est d'usage sous linux de commencer un script par la ligne "#! /usr/bin/env python" pour indiquer au shell d'utiliser python pour interpréter le fichier à exécuter
  • Toutes les lignes commençant par "#" sont des commentaires et ne sont pas prises en compte par l'interpréteur python
  • L'identation permet de définir des blocs et est fondamentale à respecter. Dans un éditeur adapté, par exemple spyder, celle-ci est souvent suggérée automatiquement.
Exemples

copy_lines.py illustre diverses manières de sélectionner des lignes à recopier d'un fichier d'entrée vers un fichier de sortie.

#! /usr/bin/env python

# importation du module "sys" qui contient des fonctions de base de python
# il est utilisé ici pour récupérer les noms des fichiers d'entrée et de sortie passés en argument du script "sys.argv[1]" et "sys.argv[2]"
import sys


# définition d'une fonction qui prend en paramètre 2 noms de fichier, le premier étant le nom du fichier à lire et le second, celui du fichier à écrire
# toutes les lignes du fichier d'entrée sont lues
# certaines lignes du fichier d'entrée (les lignes paires, impaires, commençant par "Bonjour", ...) sont sélectionnées pour être écrites dans le fichier de sortie ou bien juste affichées sur la sortie standard

### DEBUT DE LA DEFINITION DE LA FONCTION copy_lines ###
def copy_lines( input, output ) :

    # ouverture du fichier d'entrée en mode "r" (pour read)
    fd=open( input, "r" )
    # lecture en une seule fois de toutes les lignes du fichier d'entrée et stockage dans la variable liste "lines"
    lines=fd.readlines()
    # fermeture du fichier d'entrée
    fd.close()


    # ouverture du fichier de sortie en mode "w" (pour write)
    fd=open( output, "w" )

    # exemple de boucle pour recopier uniquement les lignes paires ou impaires du fichier d'entrée
    # "len(lines)" est la longueur de la liste "lines" et correspond au nombre total de lignes du fichier d'entrée
    # on utilise une variable indice "line" pour parcourir chacune des lignes de la variable liste "lines"
    # la ligne correspondante est alors accédée alors par l'expression "lines[line]"
    # en python, la première valeur d'une liste correspond à l'indice 0, la deuxième à l'indice 1, ...
    # les lignes paires 2, 4, ... du fichier d'entrée correspondent donc aux indices impaires 1, 3, ... de la liste "lines"
    # "line % 2" (line modulo 2) est le reste de la division de "line" par 2 ( 0 si "line" est pair et 1 si "line" est impair)

    # DEBUT DE LA BOUCLE
    for line in range( 0, len(lines) ) :   # "line" prend successivement les valeurs 0, 1, 2, ... len(lines)-1
        if line % 2 == 1 :    # la ligne est impaire
        # if line % 2 == 0 :    # la ligne est paire
            # l'indice correspond à une ligne sélectionnée, on écrit le contenu de la ligne dans le fichier de sortie
            fd.write( lines[line] )
    # FIN DE LA BOUCLE

    # fermeture du fichier de sortie
    fd.close()


    # autres exemples de sélection de lignes
    # les lignes sélectionnées ne sont plus recopiées dans le fichier de sortie mais uniquement affichées sur la sortie standard avec la fonction "print"

    # la boucle parcourt une ligne sur 5 en commençant à partir de la troisième, correspondant à l'indice 2
    # DEBUT DE LA BOUCLE
    for line in xrange( 2, len(lines), 5 ) :   # "line" prend successivement les valeurs 2, 7, 12, ...
        print lines[line]
    # FIN DE LA BOUCLE


    # la boucle se fait maintenant directement sur chaque ligne "line" de la liste "lines", sans passer par des indices (très intuitif)
    # différents critères sont utilisés pour afficher sur la sortie standard les lignes sélectionnées
    # DEBUT DE LA BOUCLE
    for line in lines :   # "line" prend successivement la valeur de la première ligne, de la seconde, ..., de la dernière du fichier d'entrée
        # la ligne commence par "Bonjour"
        if line.startsWith( "Bonjour" ) :
           print line
        # la ligne se termine par "Bonsoir"
        if line.endsWith( "Bonsoir" ) :
           print line
        # la ligne commence par "Bonjour" ET se termine par "Bonsoir"
        if line.startsWith( "Bonjour" ) and line.endsWith( "Bonsoir" ):
           print line
    # FIN DE LA BOUCLE

### FIN DE LA DEFINITION DE LA FONCTION copy_lines ###

# appel de la fonction copy_lines avec le nom des fichiers d'entrée et de sortie
copy_lines( sys.argv[1], sys.argv[2] )