IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Aide pour manipulation de fichier


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Par défaut Aide pour manipulation de fichier
    Bonjour,

    J'ai un fichier qui répertorie des horaires de bus pour chaque arrêts de la forme :
    final String[] arret_Granges Bardes 06:03 06:26 06:49 07:12 07:35 07:57 08:21 08:44 09:07 09:30 09:53 10:16 10:39 11:02 11:25 11:48 12:10 12:35};
    final String[] arret_Grand Challes 06:04 06:27 06:50 07:13 07:36 07:58 08:22 08:45 09:08 09:31 09:54 10:17 10:40 11:03 11:26 11:49 12:11 12:36};
    etc...

    Sauf que je voudrais obtenir ceci:
    final String[] arret_Granges Bardes = { "06:03", "06:26", "06:49", "07:12",(..) "11:48"," 12:10", "12:35"};

    J'ai ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    k=""
        #J etant le fichier 
        for i in range(len(j)):
            if a[i].isspace():
                if a[i-1].isnumeric():
                    if a[i+1].isnumeric():
                        k+= a[i+1]+' "," '
                    else:
                        k+=a[i+1]
                else:
                    k+=a[i-1]+'= {'
            else:
                k+=a[i]

    Sauf que cela me renvoi un message d'erreur :
    if a[i].isspace():
    IndexError: string index out of range

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Voir si ça convient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    x = "final String[] arret_Granges Bardes 06:03 06:26 06:49 07:12 07:35 07:57 08:21 08:44 09:07 09:30 09:53 10:16 10:39 11:02 11:25 11:48 12:10 12:35};"
     
    x2 = x.split() # découpage avec l'espace => liste
     
    x2[-1] = x2[-1][:-2] # retirer les 2 derniers caractères '};' du dernier élément
     
    x3 = ' '.join(x2[:4]) +  ' = ' # on fabrique la chaine d'entête de la ligne
     
    x4 = ['"' + hor + '"' for hor in x2[4:]] # on ajoute les guillemets à chaque heure
     
    x5 = '{' + ', '.join(x4) + '}' # on fabrique la chaine des horaires
     
    x6 = x3 + x5 # on ajoute le tout
     
    print x6
    final String[] arret_Granges Bardes = {"06:03", "06:26", "06:49", "07:12", "07:35", "07:57", "08:21", "08:44", "09:07", "09:30", "09:53", "10:16", "10:39", "11:02", "11:25", "11:48", "12:10", "12:35"}

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Ouais, Tyrtamos a été plus rapide, mais il a pondu moins de lignes de code que moi !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    # -*- coding: utf-8 -*-
     
    strs = ["final String[] arret_Granges Bardes 06:03 06:26 06:49 07:12 07:35"
            "07:57 08:21 08:44 09:07 09:30 09:53 10:16 10:39 11:02 11:25 11:48" 
            "12:10 12:35};", 
        "final String[] arret_Grand Challes 06:04 06:27 06:50 07:13 07:36 07:58" 
            "08:22 08:45 09:08 09:31 09:54 10:17 10:40 11:03 11:26 11:49" 
            "12:11 12:36};"]
     
    result = []
    for st in strs:
        s = ""
        st = st.replace('};', '').strip()
        for elem in st.split():
            if ':' not in elem:
                s += ' %s' % elem
            else:
                break
     
        s = s.strip()
        st = st.replace(s, '')
        s += ' = {'
        for elem in st.split():
            s += '"%s", ' %elem
     
        s = s[:-2] + '};'
        result.append(s)
     
    print result

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Musty_inf Voir le message
    J'ai ce bout de code :
    Salut
    "Bout de code" rime généralement avec "plan foireux" (bon ça rime pas mais dans l'idée si)

    Citation Envoyé par Musty_inf Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    k=""
        #J etant le fichier
    Bon déjà il ne s'agit pas de J mais de j; de plus qui n'est pas "le fichier" mais plutôt "la ligne" et enfin généralement on est plus habitué à voir "j" comme indice de boucle (bien que ce ne soit pas une obligation mais ça aide ensuite à se relire et à faire lire les autres)

    Citation Envoyé par Musty_inf Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        for i in range(len(j)):
            if a[i].isspace():
                if a[i-1].isnumeric():
    Et si i vaut 0, que vaut a[i-1] ???
    Citation Envoyé par Musty_inf Voir le message
    Même remarque si i est arrivé au bout

    Citation Envoyé par Musty_inf Voir le message
    IndexError: string index out of range
    Ben oui, évidemment...

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    orig="final String[] arret_Granges Bardes 06:03 06:26 06:49 07:12 07:35 07:57 08:21 08:44 09:07 09:30 09:53 10:16 10:39 11:02 11:25 11:48 12:10 12:35};"
     
    liste=orig.replace("};", "").split(" ")
     
    fin="%s {%s};" % (
    	" ".join(x for x in liste if ":" not in x),
    	", ".join('"%s"' % x for x in liste if ":" in x),
    )
     
    print fin

    Résultat:
    final String[] arret_Granges Bardes {"06:03", "06:26", "06:49", "07:12", "07:35", "07:57", "08:21", "08:44", "09:07", "09:30", "09:53", "10:16", "10:39", "11:02", "11:25", "11:48", "12:10", "12:35"};
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Par défaut
    Désolé sve@r pour les imprécisions.

    Voici le code complet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    #----------Fonction-----------#
    import os
     
    def nettoyer_fichier (file):
     
    #Suppresion des petits points
        liste_horaire = file.readlines()
     
        jointure = "".join(liste_horaire)
        nettoyage = jointure.split('.....')
        rejointure = "".join(nettoyage)
     
     
     
    #Remplace plusieurs espaces par 1 seul
        nettoyage_final = ""
        ajout = ""
        for c in rejointure:
            if not c.isspace():
                nettoyage_final += ajout+c 
                ajout=""
            else:
                ajout=" "
     
     
    #Retour à la lignes
     
        a = nettoyage_final
        b=""
        for i in range(len(a)):
            if a[i].isspace():
                    if a[i-1].isnumeric():
                            if not a[i+1].isnumeric():
     
                                b = b+"\n"
                            else:
                                b= b+" "
                    else :
                        b = b+" "
            else :
                b = b+a[i]
     
    #----------------
     
     
        c='final String[] arret_'
        c+=b
        j=c.replace('\n', '};\nfinal String[] arret_')
     
        k=""
        #j est de la frome :
        #final String[] arret_Granges Bardes 06:03 06:26 06:49 07:12 07:35 07:57 08:21 08:44 09:07 09:30 09:53 10:16 10:39 11:02 11:25 11:48 12:10 12:35};
        #final String[] arret_Grand Challes 06:04 06:27 06:50 07:13 07:36 07:58 08:22 08:45 09:08 09:31 09:54 10:17 10:40 11:03 11:26 11:49 12:11 12:36};
        #final String[] arret_Tilleuls 06:05 06:28 06:51 07:14 07:37 07:59 08:23 08:46 09:09 09:32 09:55 10:18 10:41 11:04 11:27 11:50 12:12 12:37};
        #final String[] arret_Chevrier 06:06 06:29 06:52 07:15 07:38 08:00 08:24 08:47 09:10 09:33 09:56 10:19 10:42 11:05 11:28 11:51 12:13 12:38};
        #final String[] arret_Cimetière 06:07 06:30 06:53 07:16 07:39 08:01 08:25 08:48 09:11 09:34 09:57 10:20 10:43 11:06 11:29 11:52 12:14 12:39};
        #etc... Pour tout les arrêts 
        for i in range(len(j)):
            if a[i].isspace():
                if a[i-1].isnumeric():
                    if a[i+1].isnumeric():
                        k+= a[i+1]+' "," '
                    else:
                        k+=a[i+1]
                else:
                    k+=a[i-1]+'= {'
            else:
                k+=a[i]
     
     
        return j
     
     
     
    #-------Programme-------#
    rep ="Toutes_les_horaires"
    for i in range(8):
        os.path.join(rep,"Horaires "+str(i+1)+".txt")
        fichier = open (os.path.join(rep,"Horaires " +str(i+1)+".txt"), 'rU' )
        nom_fichier = nettoyer_fichier(fichier)
        fichier_net = open (os.path.join(rep,"Horaires_net " +str(i+1)+".txt"), 'wt')
        fichier_net.writelines(nom_fichier)
        fichier.close()
        fichier_net.close()
        print(nom_fichier)
    J'ai essayer la méthode à tyrtamos mais cela ne marche que pour la première ligne. C'est pour ca que j'ai essayé de traiter le fichier par une boucle.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Musty_inf Voir le message
    J'ai essayer la méthode à tyrtamos mais cela ne marche que pour la première ligne. C'est pour ca que j'ai essayé de traiter le fichier par une boucle.
    Ben oui. On s'est tous attachés à te montrer comment traiter une seule et unique ligne. Charge bien évidemment à toi d'intégrer l'un ou l'autre de ces différents codes dans une boucle apte, elle, à récupérer chaque ligne du fichier. Ce qui n'est pas bien difficile.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fp=open("fichier", "r")
    for lig in fp:
    	liste=lig.replace("};", "").split(" ")
     
    	result="%s {%s};" % (
    		" ".join(x for x in liste if ":" not in x),
    		", ".join('"%s"' % x for x in liste if ":" in x),
    	)
    	print result		# Ou bien envoyer result dans un second fichier
    # for
    fp.close()
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Générer un fichier word ou excel en php
    Par Taz_8626 dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 10/05/2011, 09h57
  2. Aide pour insérer un fichier flash dans un site web
    Par constitain dans le forum Flash
    Réponses: 2
    Dernier message: 26/07/2006, 22h59
  3. Réponses: 45
    Dernier message: 04/05/2006, 01h10
  4. Besoin d'aide pour recuperer les fichier d'un projet
    Par barthelv dans le forum Applications et environnements graphiques
    Réponses: 9
    Dernier message: 14/04/2006, 11h47
  5. Réponses: 2
    Dernier message: 18/01/2003, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo