Introductionàlabio-informatique(3I019) 3I019:Cour4 Introduction à linux et python pour l’analyse de séquences Responsables.HuguesRichard([email protected])etJulianaSilva-Bernardes ([email protected]). Enseignantcours.JulianaSilva-Bernardes. 1 Introductionàlabio-informatique(3I019) Linux Lister le contenu d'un dossier ls liste le dossier de travail courant ls -l dossier liste au format détaillé le dossier dossier Par exemple : ls –l -rw-r--r--@ 1 julianab staff 12310392 Feb 1 15:03 Saccharomyces.cerevisiae.genome Besoin d'aide : La commande man La plupart des commandes ont une page de manuel qui donne une description de leurs utilisations plus ou moins détaillées, parfois utiles, parfois obscures. Certains disent qu'elles ont été appelées "man pages", parce qu'elles ne s'adressent qu'aux vrais Hommes. Exemple: man ls Déplacer, renommer et copier des fichiers • Copier un fichier cpfichier_sourcefichier_destination • Copier un dossier cp-rdossier_sourcedossier_destination • Déplacer ou renommer un fichier mvfichier1nouveau_nom_fichier1 • Supprimer un fichier (ou une liste de fichiers) rmfichier1[fichier2…] • Supprimer un dossier et tous ses sous-dossiers, à manier avec précaution rm-rdossier1[dossier2…] • Créer un dossier mkdirdossier1[dossier2…] • supprime un dossier vide rmdirdossier1[dossier2…] 2 Introductionàlabio-informatique(3I019) Visualiser et éditer les fichiers • affiche le contenu du fichier à l'écran catfichier • affiche progressivement un fichier à l'écran : Entrer = descend d'une ligne, Espace = descend d'une page, q = quitte morefichier • comme more, mais on peut utiliser la touche Page Précédente. Pas disponible sur tous les systèmes. lessfichier • éditer un fichier avec l'éditeur nano. CtrlX pour savegarder le fichierTous. nanofichier • affiche par défaut les 10 premières lignes d'un fichier headfichier • affiche les N premières lignes d'un fichier head-n{N}fichier • affiche par default les 10 dernières lignes d'un fichier tailfichier • affiche les N dernières lignes d'un fichier tail-n{N}fichier Comparaison du contenu de deux fichiers avec diff La commande diff permet de voir la différence entre deux fichiers. Nous avons deux fichiers version1 et version2, voici un exemple de comment les comparer. version1 1 2 4 version2 1 2 3 4 $ diff version1 version2 2a3 >3 Ici, la commande nous indique que après la deuxieme ligne du premier fichier nous devons incrusté la ligne 3 du deuxieme fichier. version1 1 2 4 6 version2 1 2 3 4 3 Introductionàlabio-informatique(3I019) $ diff version1 version2 2a3 >3 4d4 <6 2a3 nous indique que après la deuxieme ligne du premier fichier nous devons incrusté la troisieme ligne du deuxieme fichier. 4d4 nous indique que la ligne 4 du premier fichier doit être supprimés, car elle n'exist pas derrière la ligne 4 du second. Pipes Le symbole tube ("pipe") "|" est utilisé pour rediriger la sortie d'une commande vers une autre. Par exemple : ls -l | more Cette commande prend la sortie du listage au format long des fichiers dans un répertoire produit par "ls -l" et la redirige vers la commande "more" (aussi appelé filtre). Dans ce cas, une très longue liste de fichier peut être vue page par page. Trouvez plus de detais sur les commades unix dans le liens ci-dessous - http://www.epons.org/commandes-base-linux.php - https://buzut.fr/101-commandes-indispensables-sous-linux/ Python Python Strings Les chaines de caractères sont des listes de caractères. On parle de chaine car les caractère se suive et chaque caractère a sa place comme les maillons d'une chaine. Il est ainsi possible de faire apparaitre plusieurs fois le même caractère dans une chaine. >>> dna = 'CTGACCACTTTACGAGGTTAGC' Nous pouvons donc utiliser certaines propriétés des listes comme les tranches : >>> >>> >>> >>> dna[0] dna[1] dna[2] dna[3] 'C' 'T' 'G' 'A' A contrario des listes, les chaînes de caractères présentent toutefois une différence notable, ce sont des listes non modifiables. Une fois définie, vous ne pouvez plus modifier un de ses éléments. Le cas échéant, Python renvoie un message d'erreur : >>> dna[22] = 'C' Traceback (most recent call last): File "<stdin>", line 1, in <module> 4 Introductionàlabio-informatique(3I019) TypeError: 'str' object does not support item assignment >>> Python Functions Il exist plusieur fonctions associée aux chaînes de caractères qui est particulièrement pratique. Par exemple: >>> dna.lower() 'ctgaccactttacgaggttagc' >>> rna = dna.replace('T', 'U') >>> rna 'CUGACCACUUUACGAGGUUAGC' La fonction split() découpe la ligne en champs, en utilisant comme séparateur les espaces ou les tabulations. Il est possible de modifier le séparateur de champs, par exemple : >>> dna = 'CTG ACC ACT TTA CGA GGT TAG' >>> dna.split() ['CTG', 'ACC', 'ACT', 'TTA', 'CGA', 'GGT', 'TAG'] La fonction find() recherche une chaîne de caractères passée en argument. >>> dna = 'CTGACCACTTTACGAGGTTAGC' >>> dna.find('TTT') 8 Enfin, la fonction count() compte le nombre d'occurences d'une chaîne de caractères passée en argument : >>> dna.count('TT') 2 Python Lists Les listes (ou list / array) en python sont une variable dans laquelle on peut mettre plusieurs variables.. >>> bases = ['A', 'C', 'G', 'T'] >>> bases.append('U') >>> bases ['A', 'C', 'G', 'T', 'U'] >>> bases.reverse() >>> bases ['U', 'T', 'G', 'C', 'A'] >>> bases[0] 'U' >>> bases[1] 'T' >>> bases.remove('U') >>> bases ['T', 'G', 'C', 'A'] >>> bases.sort() >>> bases ['A', 'C', 'G', 'T'] Fonctions définies par l'utilisateur Voici le processus pour créer votre propre fonction en Python. La première ligne commence par le mot-clé def, est suivi du nom de la fonction et de tous les arguments (valeurs d'entrée attendues) entourés de parenthèses, et 5 Introductionàlabio-informatique(3I019) se termine par un signe deux-points. Les lignes suivantes composent le corps de la fonction et doivent être indentées. Si un commentaire de block apparaît dans la première ligne du corps, il devient une partie de la documentation de la fonction. La dernière ligne d'une fonction retourne un résultat. >>> def transcribe(dna): """Return dna string as rna string.""" return dna.replace('T', 'U') >>> transcribe('CCGGAAGAGCTTACTTAG') 'CCGGAAGAGCUUACUUAG' >>> def reverse(s): """Return the sequence string in reverse order.""" letters = list(s) letters.reverse() return ''.join(letters >>> reverse('CCGGAAGAGCTTACTTAG') 'GATTCATTCGAGAAGGCC' Python Dictionaries Un dictionnaire Python a le même avantage qu'un dictionnaire papier. Il vous permet de localiser rapidement la valeur (définition) associée à une clé (mot). Les dictionnaires sont désignés par des accolades et contiennent une séquence séparée par des virgules de paires clé: valeur. Les valeurs de dictionnaire sont accédées par leur valeur de clé, plutôt que leur position dans la séquence. Examinons quelques-unes des méthodes prises en charge par les dictionnaires. >>> basecomplement = {'A': 'T', 'C': 'G', 'T': 'A', 'G': 'C'} >>> basecomplement.keys() ['A', 'C', 'T', 'G'] >>> basecomplement.values() ['T', 'G', 'A', 'C'] >>> basecomplement['A'] 'T' >>> basecomplement['C'] 'G' >>> for base in basecomplement.keys(): print "The complement of", base, "is", basecomplement[base] The complement of A is T The complement of C is G The complement of T is A The complement of G is C >>> for base in basecomplement: print "The complement of", base, "is", basecomplement[base] The complement of A is T The complement of C is G The complement of T is A The complement of G is C L'exemple suivant démontrera une autre technique dont nous aurons besoin dans notre fonction de complément. C'est une fonctionnalité relativement nouvelle de Python, appelée list comprehensions. >>> letters = list('CCGGAAGAGCTTACTTAG') >>> [basecomplement[base] for base in letters] ['G', 'G', 'C', 'C', 'T', 'T', 'C', 'T', 'C', 'G', 'A', 'A', 'T', 'G', 'A', 'A', 'T', 'C'] 6 Introductionàlabio-informatique(3I019) Une liste de compréhension renvoie une liste et fonctionne de façon similaire à une boucle for, mais dans un format beaucoup plus compact et efficace. Dans ce cas, il nous permet de retourner une nouvelle liste dans laquelle chaque base de la liste de lettres originale a été remplacée par son complément, que nous avons extrait du dictionnaire de base. Voyons comment nous mettons tout cela ensemble. >>> def complement(s): """Return the complementary sequence string.""" basecomplement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'} letters = list(s) letters = [basecomplement[base] for base in letters] return ''.join(letters) >>> complement('CCGGAAGAGCTTACTTAG') 'GGCCTTCTCGAATGAATC' Maintenant que nous avons une fonction inverse et une fonction complémentaire, nous avons les blocs de construction d'une fonction inversée. >>> def reversecomplement(s): """Return the reverse complement of the dna string.""" s = reverse(s) s = complement(s) return s >>> reversecomplement('CCGGAAGAGCTTACTTAG') 'CTAAGTAAGCTCTTCCGG' Il peut également être utile de connaître le pourcentage d'ADN composé de bases G et C. Les objets String ont une méthode count () qui renvoie le nombre de occurrences de caractères. Avec cette information, calculer le pourcentage est une simple question d'appliquer quelques calculs mathématiques. >>> def gc(s): """Return the percentage of dna composed of G+C.""" gc = s.count('G') + s.count('C') return gc * 100.0 / len(s) >>> gc('CCGGAAGAGCTTACTTAG') 50.0 >>> gc('CCGGAAGAGCTTACTTAGTTA') 42.857142857142854 Trouvez plus de detais sur le langage python dans le liens ci-dessous - https://openclassrooms.com/courses/apprenez-a-programmer-en-python - http://www.courspython.com/introduction-python.html 7