Remettre une tartine dans l'ordre

De Centre de Ressources Numériques - Labomedia
Révision de 24 janvier 2015 à 16:44 par Olivier (discussion | contributions)

(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher
Remettre une tartine dans l'ordre
Tartine ordre.jpg


Pour modifier la page utiliser l'onglet Modifier avec formulaire.

Résumé Permet de remettre une tartine dans l'ordre.
Auteur(s) 01ivier
Licence CC-BY-SA 3
Date de création 01 décembre 2014


Intentions / Contexte

La 182 ème tartine ayant été postée dans le désordre, je souhaitais proposer un moyen de la remettre dans l'ordre..

Principe de fonctionnement

Un script en python lit le fichier "tartine_en_desordre.txt", remet toutes ses lignes dans l'ordre et les écrit dans le fichier "tartine_ordonnee.txt"

Besoins / Compétences

De la volonté.

Documentation

Qu'est-ce qu'une tartine ?

C'est expliqué ici.

Que faut-t-il faire pour remettre la 182ème tartine dans l'ordre ?

  1. créer un dossier genre "tartine" sur le Bureau et inclure les fichiers ci-dessous :
  2. copier/coller le script ci-dessous dans un fichier texte nommé "ordonnons-la-tartine.py"
  3. copier/coller la tartine que vous avez reçue dans un fichier texte nommé "tartine_en_desordre.txt"
  4. placer ces 2 fichiers dans le répertoire créer plus haut : "tartine".
  5. ouvrir un terminal et accéder au dossier sur le bureau
cd /home/MonNom/Bureau/tartine

ou avec cette commande simplifiée

cd ~/Bureau/tartine

6. exécuter le script avec la ligne de commande suivante :

python ordonnons-la-tartine.py

Un fichier "tartine_ordonnee.txt" a normalement été créé aux côtés des deux autres.

Si vous êtes resté bloqué à la 6ème étape, il faut venir aux Open Atelier du Labomedia le jeudi (LOL).

Les erreures

Avec Debian Jessie, j'ai ce retour:

$ python ordonnons-la-tartine.py
Traceback (most recent call last):
  File "ordonnons-la-tartine.py", line 20, in <module>
    dico_tartine[int(ligne[:3])] = ligne[4:]
ValueError: invalid literal for int() with base 10: 'exq'

Le script

# -*- coding: utf-8 -*-

# On crée un dictionnaire vide
dico_tartine = {}

# On ouvre le fichier tartine.txt et on le place
# dans une variable que l'on appelle la_tartine_dans_le_desordre
with open ("tartine_en_desordre.txt", 'r') as la_tartine_dans_le_desordre:

    # Pour chacune des lignes de la_tartine_dans_le_desordre...
    for ligne in la_tartine_dans_le_desordre:

        # on enlève les retours chariot en fin de ligne
        #ligne = ligne.rstrip('\n\r')

        # on regarde les 2 premiers caractères 
        # qui correspondent au numéro des lignes de la tartine dans l'ordre
        # et on crée une entrée dans le dictionnaire dont la 'clé" est
        # ce numéro et la 'valeur' le reste de la ligne.
        dico_tartine[int(ligne[:3])] = ligne[4:]
        
with open ("tartine_ordonnee.txt", 'w') as la_tartine_dans_l_ordre:

    # On compte de 0 jusqu'au nombre d'élément dans le tableau (moins un)
    for numero in range(len(dico_tartine)):

       la_tartine_dans_l_ordre.write(dico_tartine[numero])

En Ruby

content = []

File.open("original.txt", "r") do |f1|
  while (line = f1.gets)
    content[line.split(' ').first.to_i] = line
  end
end

File.open('order.txt', 'w') do |f2|
  content.each do |line|
    f2.puts line
  end
end