Partage
  • Partager sur Facebook
  • Partager sur Twitter

split

    12 février 2016 à 10:56:15

    Bonjour à tous,

    J'ai une variable reader qui me permet de lire un fichier tsv.

    Quand je fais : 

    for row in reader:
       print(row)

    J'obtiens le résultat suivant pour chaque ligne :  ['53', '2',  'word1 word2 word3 word4 ...', '4']

    J'aimerais avoir le résultat suivant: ['53', '2', 'word1', 'word2', 'word3', 'word4', '4' ]

    Comment puis-je faire ?

    Merci d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
      12 février 2016 à 11:17:53

      J'ai essayé de faire

      for row in reader:
         row[2].split(" ")
         print(row)

      mais le souci c'est que j'ai "2lignes de résultats" pour chaque ligne de reader: la première ligne m'affiche row[2] et la seconde ligne m'affiche row sans avoir splitter row[2]

      Ex du résultat retourné:

      ['avuncular', 'chortles']

      ['150', '2', 'avuncular, chortles', '5']

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        12 février 2016 à 11:27:01

        A mon avis, le plus simple serait de créer une nouvelle liste ainsi :

        for row in reader:
           print(row[0::1] + row[2].split() + row[3])



        • Partager sur Facebook
        • Partager sur Twitter
          12 février 2016 à 11:39:48

          Merci pour ton aide !

          En essayant avec ton bout de code, j'ai l'erreur suivante: TypeError : can only concatenate list (not "str") to list 

          • Partager sur Facebook
          • Partager sur Twitter
            12 février 2016 à 11:51:49

            Salut,

            row[0:2] + row[2].split() + row[3:]



            • Partager sur Facebook
            • Partager sur Twitter
              12 février 2016 à 11:58:14

              Merci beaucoup à vous  Yksuh  et KriSpiX ! 

              Juste je voulais savoir pourquoi avec la syntaxe que tu m'as donné KriSpiX ça marche et pas avec la syntaxe de Yksuh ?

              Serait-il possible de stocker le résultat du print dans une variable ? (afin de recréer un fichier tsv avec ces résultats)

              Merci d'avance !

              • Partager sur Facebook
              • Partager sur Twitter
                12 février 2016 à 12:04:08

                Tu ne peux concaténer que des listes entre elles. row[3] n'est pas une liste mais un str donc la concaténation échoue.

                Ca marcherait aussi en castant ton str en list => list(row[3]). Mais je préfère la solution de row[3:] qui va aller jusqu'au bout de ta liste row et pas seulement prendre l'index 3 (Si jamais ton format change dans le temps et qu'il y a des colonnes en plus).

                Après la concaténation, oui tu récupères une liste donc tu peux t'en servir pour recréer ce que tu veux après.

                -
                Edité par KriSpiX 12 février 2016 à 12:04:46

                • Partager sur Facebook
                • Partager sur Twitter
                  12 février 2016 à 12:32:07

                  Merci pour les explications !

                  Dans cette liste que j'obtiens, je remarques que j'ai lignes qui se repetent.

                  Je me rends compte que ces lignes ont le même entier pour row[1], par conséquent je souheterais conserver que la "premiere" ligne contenant ce nombre et supprimer toutes les autres lignes qui contiendraient ce nombre pour row[1].

                  Est-il possible de faire un del en ajoutant comme condition pour row[1]: garder la 1ère ligne de résultat contenant ce nombre et supprimer toutes les autres lignes contenant ce nombre ?

                  Merci d'avance !

                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 février 2016 à 14:12:30

                    Suffit juste de faire le test dans ta boucle.

                    Tu initialises une liste vide. A chaque passage de la boucle, tu tests si row[1] appartient à cette liste. Si oui, tu as déjà récupéré une ligne et si non, tu stockes row[1] dans la liste.

                    found = []
                    res = []
                    for row in reader:
                        if row[1] in found:
                            print "Déjà trouvé"
                        else:
                            res.append(row[0:2] + row[2].split() + row[3:])
                            found.append(row[1])



                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 février 2016 à 16:00:04

                      Pour récupérer toutes les lignes de résultat dans une variable, je peux faire comment ?

                      J'ai défini une variable result.

                      for row in reader:
                          result = row[0:2] + row[2].split() + row[3:]
                          print(result)

                      Le print m'affiche bien toutes les lignes contenant chacune une liste ['1', '2365', 'word1', 'word2', 'word3', '45' ]

                      Le souci c'est que quand je refais print(result), je ne vois que la derniere ligne de l'ensemble des résultats : je ne vois qu'une seule liste et non l'ensemble de toutes les listes...

                      Merci d'avance !

                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 février 2016 à 16:09:11

                        Faire un tableau de résultat, c'est l'exemple que j'ai indiqué dans mon précédent poste ;)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        split

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown