Partage
  • Partager sur Facebook
  • Partager sur Twitter

aide changer nombre et repeter la ligne

Sujet résolu
    15 octobre 2021 à 15:36:49

    même à la fin? pas une ligne vide ? le fichier se finit sur la ligne 22 ? 

    sinon hop une petite mise à jour pour ne pas traiter les lignes vides

    out=""
    with open('/home/bobi/Desktop/cards.txt') as f:
       for ligne in f:
            ligne=ligne.strip()
            if ligne !='':
                n,mot=ligne.split(maxsplit=1)
                out+=(mot+'\n')*int(n)
     
    with open('/home/bobi/Desktop/cards1.txt','w') as f:
        f.write(out)
    


    Edit: sinon pas de souci avec le from. le fichier à traiter est lu comme un fichier texte 

    -
    Edité par umfred 15 octobre 2021 à 15:41:33

    • Partager sur Facebook
    • Partager sur Twitter
      15 octobre 2021 à 15:57:08

      ça marche nickel

      maintenant le soucis et autre, il créé bien le fichier mais comme il porte le même nom, il m'en fait que un au final!!!

      genre, gnome.png au lieu de me créer gnome.png , gnome(copie).png, gnome (copie1).png comme fait linux ou windows

      comment lui dire car je trouve aucun tutorial sur le net

       for card_obj in cards:
              name = card_obj["name"].replace("//", "&")  # should work on macOS & windows now
              name = name.replace(":", "")  # case for Circle of Protection: X




      -
      Edité par beaudottesevran 15 octobre 2021 à 16:15:56

      • Partager sur Facebook
      • Partager sur Twitter
        15 octobre 2021 à 16:35:58

        tu veux copier des images maintenant ?
        • Partager sur Facebook
        • Partager sur Twitter
          15 octobre 2021 à 16:43:56

          Je t'avais prévenu que tu écrasais le fichier d'origine, mais tu peux en créer un autre comme j'ai fait dans mon code en nommant le 2nd cards1.txt ligne 9 par exemple.

          pourquoi vouloir dupliquer une image sur le disque dur ? Si tu nous disais le but final plutôt ? c'est quoi le but de ton bout de code ?

          • Partager sur Facebook
          • Partager sur Twitter
            15 octobre 2021 à 16:51:33

            je joue au jeu de carte "magic the gathering"

            sur tous les sites, il est possible de créer son deck "comme une wishlist", il y a donc souvent des cartes en double voir en quadruple (on a pas droit dans avoir + de 4 du même exemplaire)

            j'ai donc un script qui va lire mon fichier txt, et qui va chercher les images des cartes en high quality, enlever le copyright pour pouvoir les imprimers soit sur un site dédié makeplayingcards ou soit en imprimerie.

            donc j'ai besoin que la carte qui est marqué 3fois dans ma liste, soit imprimé 3fois aussi et non 1fois

            • Partager sur Facebook
            • Partager sur Twitter
              15 octobre 2021 à 17:30:44

              mais du coup ça ne sert à rien de la dupliquer sur disque, ni de faire la manip qu'on a fait sur le fichier.

              Il faut récupérer une fois l'image de chaque carte (où? on ne sait pas, peut-être que tu nous le diras; comment? probablement avec du webscrapping) 

              Une fois récupérées, il faut les imprimer n fois (mais est-ce le script qui fait l'impression ou pas?)

              Sinon, une remarque, en supprimant le copyright, on rentre dans une forme d'illégalité.

              • Partager sur Facebook
              • Partager sur Twitter
                15 octobre 2021 à 17:57:22

                non c'est pas illegal de supprimer le copyright, c'est fait justement pour les cartes "dite proxy" on peut les jouer mais pas dans les tournois et pour les vendres, on voit facilement que c'est des fausses

                on fait ça en générale pour pas payer 10000euros ses cartes

                bien si ça sert car on a droit d'avoir plusieurs fois la même carte.

                quand tu imprimes 500 cartes, crois moi cela te fait gagner du temps quand ton deck est en ordre avec le nombre de cartes qu'il faut!!!

                du coup, il y a toujours un problème de ligne.replace() , il faut qu'il enlève les SB: et aussi Sideboard: mais si il y en a pas, il faut qu'il continu sa route "ce qu'il ne fait pas"

                ahhh c'est deja un script mais je l'améliore!!

                le voici

                import scrython
                import imageio
                import requests
                import time
                import config
                import numpy as np
                import os
                import os.path
                from numpy.fft import fft2, ifft2, fftshift, ifftshift
                from skimage.transform import resize
                
                
                
                magic = '''          .$$      /$$                     /$$                 /$$$$$$$                                        
                | $$$    /$$$                    |__/                | $$__  $$                                       
                | $$$$  /$$$$  /$$$$$$   /$$$$$$  /$$  /$$$$$$$      | $$  \ $$ /$$$$$$   /$$$$$$  /$$   /$$ /$$   /$$
                | $$ $$/$$ $$ |____  $$ /$$__  $$| $$ /$$_____/      | $$$$$$$//$$__  $$ /$$__  $$|  $$ /$$/| $$  | $$
                | $$  $$$| $$  /$$$$$$$| $$  \ $$| $$| $$            | $$____/| $$  \__/| $$  \ $$ \  $$$$/ | $$  | $$
                | $$\  $ | $$ /$$__  $$| $$  | $$| $$| $$            | $$     | $$      | $$  | $$  >$$  $$ | $$  | $$
                | $$ \/  | $$|  $$$$$$$|  $$$$$$$| $$|  $$$$$$$      | $$     | $$      |  $$$$$$/ /$$/\  $$|  $$$$$$$
                |__/     |__/ \_______/ \____  $$|__/ \_______/      |__/     |__/       \______/ |__/  \__/ \____  $$
                                        /$$  \ $$                                                            /$$  | $$
                                       |  $$$$$$/                                                           |  $$$$$$/
                                        \______/                                                             \______/ 
                
                
                
                        .$$$$$:$$$:$$$$$$$     _..._        .$$$SSSSSS$$$$$$$$$.
                       .$$$$$:$$$$:$$$$$$$    ~.sggg.        "  .~(g )$$$$$$$$$$.
                       $$$$$:$$$$$:$$$$$$$ .sS$$$$$$$$s.     : '"--"' `$$$$$$$$$$.
                       `$$$:$$$$$$:$$$$$$$.$$" .. g"-. `.    `.-.._    `$$$$$$$$$$
                        $$$:$$$$$$:$$$$$$$`$' ' `._.'   :      `---      $$$$$$$$$.
                        $$$:.$$$$$:$$$$$$$    `---'  _.'                 $$$$$$$$$$$.
                        $$$$$:$$$$:$$$$$$s      ----"           .        $$$$$$$$$$$$.
                        $$$$$`.$$$:$$$$$$$.                      `-._   .$$$$$$$$$$$$$$Sss.
                        $$$$$$`;$$:$$$$$$$$.         _.:         .'   ;  $$$$$$$$$$$$$$$$$$$.
                       .s$$$$$$'$$`.$$$$$$$$.      .'  `.       ' _ .`.  $$$$$$$$$$$$$$$$$$$$Ss.
                     .s$$$$$$$$$$$$:$$$$$$$$$     :  _   ~~-...'.'.'  :  $$$$$$$$$$$$$$$$$$$$$$$
                   .s$$$$$$$$$$$$$$`.$$$$$$$$s      : .~-,-.-.~:'.'   :  $$$$$$$$$$$$$$$$$$$$$$
                 .s$$$$$$$$$$$$$$$$$`$$$$$$$$$$.    `  ~-.`"""'.'      `.$$$$$$$$$$$$$$$$$$$' '''
                
                print(magic)
                print ("je vais creer le repertoire de votre deck:")
                answer1=input('')
                print ("quel est le nom du fichier txt:")
                answer2=input('')
                
                folder = answer1
                os.chdir(".")
                print("current dir is: %s" % (os.getcwd()))
                
                if os.path.isdir(folder):
                    print("Exists")
                else:
                    print("Doesn't exists")
                    os.mkdir(folder)
                def process_card(cardname, expansion=None):
                    time.sleep(0.05)
                
                    # try/except in case the search doesn't return anything
                    try:
                        # If the card specifies which set to retrieve the scan from, do that
                        if expansion:
                            # Set specified from set formatter
                            query = "!\"" + cardname + "\" set=" + expansion
                            print("Processing: " + cardname + ", set: " + expansion)
                        else:
                            query = "!\"" + cardname + "\""
                            print("Processing: " + cardname)
                        card = scrython.cards.Search(q=query).data()[0]
                
                    except scrython.foundation.ScryfallError:
                        print("Couldn't find card: " + cardname)
                        return
                
                    # Handle cards with multiple faces
                    if card["layout"] == "transform":
                        cards = [x for x in card["card_faces"]]
                    else:
                        cards = [card, ]
                
                    for card_obj in cards:
                        name = card_obj["name"].replace("//", "&")  # should work on macOS & windows now
                        name = name.replace(":", "")  # case for Circle of Protection: X
                
                        # Process with waifu2x
                        r = requests.post(
                            "https://api.deepai.org/api/waifu2x",
                            data={
                                'image': card_obj["image_uris"]["large"],
                            },
                            headers={'api-key': config.TOKEN}
                        )
                        output_url = r.json()['output_url']
                        im = imageio.imread(output_url)
                
                        # Read in filter image
                        filterimage = np.copy(imageio.imread("/home/bobi/Desktop/mpc-scryfall-master/filterimagenew.png"))
                
                        # Resize filter to shape of input image
                        filterimage = resize(filterimage, [im.shape[0], im.shape[1]], anti_aliasing=True, mode="edge")
                
                        # Initialise arrays
                        im_filtered = np.zeros(im.shape, dtype=np.complex_)
                        im_recon = np.zeros(im.shape, dtype=np.float_)
                
                        # Apply filter to each RGB channel individually
                        for i in range(0, 3):
                            im_filtered[:, :, i] = np.multiply(fftshift(fft2(im[:, :, i])), filterimage)
                            im_recon[:, :, i] = ifft2(ifftshift(im_filtered[:, :, i])).real
                
                        # Scale between 0 and 255 for uint8
                        minval = np.min(im_recon)
                        maxval = np.max(im_recon)
                        im_recon_sc = (255 * ((im_recon - minval) / (maxval - minval))).astype(np.uint8)
                
                        # TODO: pre-m15, post-8ed cards
                        # TODO: pre-8ed cards (?)
                
                        # Borderify image
                        pad = 57  # Pad image by 1/8th of inch on each edge
                        bordertol = 16  # Overfill onto existing border by 16px to remove white corners
                        im_padded = np.zeros([im.shape[0] + 2 * pad, im.shape[1] + 2 * pad, 3])
                
                        # Get border colour from left side of image
                        bordercolour = np.median(im_recon_sc[200:(im_recon_sc.shape[0] - 200), 0:bordertol], axis=(0, 1))
                
                        # Pad image
                        for i in range(0, 3):
                            im_padded[pad:im.shape[0] + pad, pad:im.shape[1] + pad, i] = im_recon_sc[:, :, i]
                
                        # Overfill onto existing border to remove white corners
                        # Left
                        im_padded[0:im_padded.shape[0],
                                  0:pad + bordertol, :] = bordercolour
                
                        # Right
                        im_padded[0:im_padded.shape[0],
                                  im_padded.shape[1] - (pad + bordertol):im_padded.shape[1], :] = bordercolour
                
                        # Top
                        im_padded[0:pad + bordertol,
                                  0:im_padded.shape[1], :] = bordercolour
                
                        # Bottom
                        im_padded[im_padded.shape[0] - (pad + bordertol):im_padded.shape[0],
                                  0:im_padded.shape[1], :] = bordercolour
                
                        # Remove copyright line
                        if card["frame"] == "2015":
                            # Modern frame
                            leftPix = 735
                            rightPix = 1140
                            topPix = 1550
                            bottomPix = 1585
                
                            # creatures have a shifted legal line
                            try:
                                power = card_obj["power"]
                                toughness = card_obj["toughness"]
                                topPix = 1575
                                bottomPix = 1615
                                # Creature card
                            except KeyError:
                                pass
                
                            # planeswalkers have a shifted legal line too
                            try:
                                loyalty = card_obj["loyalty"]
                                topPix = 1575
                                bottomPix = 1615
                            except KeyError:
                                pass
                
                            im_padded[topPix:bottomPix, leftPix:rightPix, :] = bordercolour
                
                        elif card["frame"] == "2003":
                            # 8ED frame
                            try:
                                loyalty = card_obj["loyalty"]
                                leftPix = 300
                                rightPix = 960
                                topPix = 1570
                                bottomPix = 1600
                                im_padded[topPix:bottomPix, leftPix:rightPix, :] = bordercolour
                            except KeyError:
                                # TODO: Content aware fill?
                                pass
                
                        # Remove holostamp
                        if card["frame"] == "2015" and (card["rarity"] == "rare" or card["rarity"] == "mythic") \
                                and "/large/front/" in card_obj["image_uris"]["large"]:
                            # Need to remove holostamp
                            # Define bounds of ellipse to fill with border colour
                            leftE = 575
                            rightE = 690
                            topE = 1520
                            bottomE = 1575
                
                            cx = (leftE + rightE) / 2
                            cy = (topE + bottomE) / 2
                
                            h = (bottomE - topE) / 2
                            w = (rightE - leftE) / 2
                
                            for x in range(leftE, rightE + 1):
                                for y in range(topE, bottomE + 1):
                                    # determine if point is in the holostamp area
                                    if pow(x - cx, 2) / pow(w, 2) + pow(y - cy, 2) / pow(h, 2) <= 1:
                                        # point is inside ellipse
                                        im_padded[y, x, :] = bordercolour
                
                        # Write image to disk
                        imageio.imwrite(answer1 + "/" + name + ".png", im_padded.astype(np.uint8))
                
                
                
                out=""
                with open('answer1 + answer2 + ".txt"') as f:
                   for ligne in f:
                        ligne=ligne.strip()
                        if ligne !='':
                            n,mot=ligne.split(maxsplit=1)
                            out+=(mot+'\n')*int(n)
                with open('answer1 + answer2 + ".txt"','w') as f:
                    f.write(out)
                
                if __name__ == "__main__":
                    # Loop through each card in cards.txt and scan em all
                
                
                    with open('answer1 + answer2 + ".txt"', 'r') as fp:
                        for cardname in fp:
                            cardname = cardname.rstrip()
                            try:
                                pipe_idx = cardname.index("|")
                                process_card(cardname[0:pipe_idx], cardname[pipe_idx+1:])
                            except ValueError:
                                process_card(cardname)

                donc j'ai créé le ascii art ^^, et j'ai codé les questions et les reponses, et j'ai réussi qu'il upload les images dans le dossier créé, mais je n'arrive pas qu'il va chercher les informations des cartes dans le fichier txt indiqué...

                -
                Edité par beaudottesevran 15 octobre 2021 à 18:07:24

                • Partager sur Facebook
                • Partager sur Twitter
                  15 octobre 2021 à 18:08:33

                  on ne sait toujours pas où est ce "SB:" ou "sideboard:" vu que dans l'exemple de liste de cartes que tu nous as donné, il n'y en a pas. 

                  et nos boules de cristal sont en révision annuelle pour qu'on soit prêt pour Halloween

                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 octobre 2021 à 18:19:17

                    c'est dans le fichier txt ou les cartes sont écrites

                    mais c'est quelques fois et non tout le temps!!

                    SB: 3 ogres

                    Sideboard:

                    2 papillon

                    voila, desfois il y a les 2 termes et desfois il y en a qu'un voir aucun!

                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 octobre 2021 à 18:37:55

                      du coup, en ligne 6 de mon code, rajouter les replace qui vont bien ligne.replace("SB: ","").replace("Sideboard: ","").split(maxsplit=1) et ça devrait aller si pas de nouvelles surprises

                      et tout ton code qui n'est pas une fonction devrait être dans if __name__="__main__"

                      mais encore une fois, tu n'as besoin de sauvegarder qu'une fois l'image d'une créature, et dire ensuite que tu la veux en n exemplaires; mais si tu insistes pour l'avoir n fois, il faut que si l'image existe, rajouter un numéro derrière (par exemple) au moment de son enregistrement (ligne 214)

                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 octobre 2021 à 18:54:26

                        @umfred: N'aies pas peur, je vais t'envoyer tes candies d'Alloween par MP ...
                        Pourquoi ne pas utiliser startswith et faire 3 (ou plus)  traitements différents?
                        if ligne.startswith(...):
                            # faire l'action appropriée.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Le Tout est souvent plus grand que la somme de ses parties.

                          15 octobre 2021 à 19:48:03

                          oui mais je sais pas comment faire avec ton code...

                          j'ai remodifié mon code, j'avance, j'arrive maintenant à choisir le dossier de download des images et choisir le fichier txt

                          mais je voudrais comme tu as dis, qu'il duplique le fichier txt et j'ai du mal car j'ai fait des path au lieu d'écrire en dur les liens

                          out=""
                          with open(filePath2) as f:
                             for ligne in f:
                                  ligne=ligne.strip()
                                  if ligne !='':
                                      n,mot=ligne.replace('SB:','').replace('Sideboard:','').split(maxsplit=1)
                                      out+=(mot+'\n')*int(n)
                                       
                          with open(filePath2 + 2 ,'w') as f:
                              f.write(out)
                          
                          if __name__ == "__main__":
                              # Loop through each card in cards.txt and scan em all
                          
                          
                              with open(filePath2 + 2 , 'r') as fp:
                                  for cardname in fp:
                                      cardname = cardname.rstrip()
                                      try:
                                          pipe_idx = cardname.index("|")
                                          process_card(cardname[0:pipe_idx], cardname[pipe_idx+1:])
                                      except ValueError:
                                          process_card(cardname)

                          et ça bug toujours avec le nom "Sideboard:", si j'enleve de mon fichier txt, ca marche bien mais si je laisse ca fait un message d'erreur


                          merci beaucoup de vos aides

                          -
                          Edité par beaudottesevran 15 octobre 2021 à 21:40:19

                          • Partager sur Facebook
                          • Partager sur Twitter
                            16 octobre 2021 à 0:12:16

                            C'est dans quel but ? Passer d'un fichier texte (pas le meilleur support de stockage) "compressé", c'est-à-dire, les lignes factorisées à un fichier texte avec les quantités de cartes développées et donc répétées ?

                            Rien que sur l'exemple de 22 lignes je crois, on passerait à 60 lignes.

                            C'est pour un jeu, et mieux vaudrait rester basique. Ou mieux, utiliser un vrai système de stockage comme pickle ou mieux du sql.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 octobre 2021 à 0:37:46

                              mon script est deja prêt est fonctionnel, sauf que je veux qu'il fonctionne avec SB: et Sideboard: en les retirants mais ca ne marche pas, dès qu'il y a une de ses expressions le script bug, si j'enlève cela marche nickel

                              et je veux juste que quand il fait une image et qu'il trouve le même nom, il fait la copie de l'image

                              ca permet tout simplement d'imprimer des decks (boite de 60 cartes) sans retoucher pendant des heures sur photoshop et adapter à la bonne taille les cartes et les recherchers sur le net

                              ici, le script le fait tout seul juste avec un fichier txt!

                              regardez

                              https://magic-ville.com/fr/decks/showdeck?ref=884376

                              il faut cliquer sur appr, vous mettez juste le fichier dans le repertoire du script et il va chercher toute les cartes du deck, enlever le copyright, adapter pour imprimer!

                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 octobre 2021 à 0:44:00

                                OK.

                                Il est légal ce site ? Retrait du copyright, pas de mentions légales alors qu'il y a du commerce (j'ai vu que les cartes peuvent s'acheter) ?

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 octobre 2021 à 9:27:44

                                  excuse mais, on peut m'aider ou pas? ça fait mille fois que je dis que oui, wizard tolère les proxy "fake card" parceque c'est visible et qu'ils ont un procèder bien à eux (un imprimeur classique ne peut pas le faire)

                                  bon je viens enfin de comprendre la source du problème de la fonction ligne.replace('Sideboard:','')

                                  cela fonctionne très bien mais comme ceci

                                  Sideboard: 2 loup-garou

                                  si il y a juste écrit

                                  Sideboard:

                                  sans rien derrière le programme bug

                                  peut être en mettant un \n derriere?

                                  -
                                  Edité par beaudottesevran 16 octobre 2021 à 10:41:46

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    18 octobre 2021 à 11:37:27

                                    ah oui le le replace il faudrait le faire avant le test if ligne!='' au niveau du strip donc
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      20 octobre 2021 à 9:53:20

                                      oui, je viens de comprendre, effectivement ça marche mais quand il y a 2 fonction replace, cela ne veut pas marcher.

                                      out=""
                                      with open(filePath2) as f:
                                          
                                         for ligne in f:
                                              ligne=ligne.strip()
                                              ligne=ligne.replace('Sideboard:', '')
                                              if ligne !='':
                                                  n,mot=ligne.replace('SB:','').replace('//','').split(maxsplit=1)
                                                  out+=(mot+'\n')*int(n)

                                      SB: et Sideboard: fonctionne très bien mais le replace '//' ne fonctionne absolument pas, peut etre parceque je n'ai pas de n "number" sur la ligne avec //

                                      j'ai juste // magic pour les nuls

                                      donc du coup, j'ai fait ainsi

                                      out=""
                                      with open(filePath2) as f:
                                          
                                         for ligne in f:
                                              ligne=ligne.strip()
                                              ligne=ligne.replace('Sideboard:', '')
                                              if ligne !='':
                                      mot=ligne.replace('//','')
                                                  n,mot=ligne.replace('SB:','').split(maxsplit=1)
                                                  out+=(mot+'\n')*int(n)

                                      marche pas non  plus


                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        20 octobre 2021 à 14:50:12

                                        ça veut dire quoi "ça ne marche pas" ???? c'est vague, message d'erreur, pas le bon résultat? (affiche ligne avant et après et n et mot après), on ne peut pas deviner ce qui ne marche pas.

                                        Et je répète mon message précédent, le replace avant le test (quand je dis 'le', j'aurais dû dire 'les' en fait)

                                        ligne 6 => ligne=ligne.replace('Sideboard: ','').replace('SB: ','').replace('//','') (à noter l'espace en fin de sous-chaine 'SB: ' et 'Sideboard: ' pour remplacer aussi l'espace qui suit la sous-chaine.

                                        ligne 9 => n,mot=ligne.split(maxplsit=1) (en supprimant la ligne 8)

                                        ta succession ligne 8, ligne 9 ne sert à rien: tu remplaces met dans mot la chaine ligne dans laquelle est supprimé le '//' et en ligne 6 tu récupères les infos  dans n et mot en te basant sur la chaine ligne

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          20 octobre 2021 à 23:29:51

                                          j'ai bien compris ta reponse mais dans la ligne 9, il va chercher si la ligne n'est pas vide avec un chiffre et un mot, non?

                                          du coup // mon fichier magic, ne fonctionne pas, puisqu'il n'y a pas de number...

                                          bien dans mon fichier txt, j'ai

                                          // mon fichier magic

                                          3 gobelins

                                          2 chats

                                          SB: 3 gold

                                          Sideboard:

                                          9 lands

                                          du coup mon script fonctionne avec sideboard et SB mais pas avec // mon fichier magic, du coup si j'enleve // mon fichier magic il marche tres bien

                                          -
                                          Edité par beaudottesevran 20 octobre 2021 à 23:32:58

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            21 octobre 2021 à 2:14:50

                                            Et que donnerait ceci?
                                            >>> ligne = "// mon fichier magic"                                                                                      
                                            >>> ligne = ligne.replace("// mon fichier magic", "0 X")                                                                
                                            >>> ligne                                                                                                               
                                            '0 X'

                                            -
                                            Edité par PierrotLeFou 21 octobre 2021 à 2:18:29

                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            Le Tout est souvent plus grand que la somme de ses parties.

                                              21 octobre 2021 à 8:45:33

                                              PierrotLeFou a écrit:

                                              Et que donnerait ceci?
                                              >>> ligne = "// mon fichier magic"                                                                                      
                                              >>> ligne = ligne.replace("// mon fichier magic", "0 X")                                                                
                                              >>> ligne                                                                                                               
                                              '0 X'

                                              -
                                              Edité par PierrotLeFou il y a environ 6 heures

                                              le problème est que derrière // c'est pas forcement mon fichier magic...



                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                21 octobre 2021 à 14:12:30

                                                le truc c'est qu'on découvre à chaque fois des cas, sans exemples ni explications, donc difficile de te donner la réponse qui te convient (on ne sait pas d'où sortent ces // et comment tu utilises les lignes qui les contiennent, etc etc)

                                                En relisant, je crois comprendre qu'il faut ignorer cette ligne qui commence par // ? dans ce cas, il faut rajouter ce cas dans la condition =>

                                                if ligne!='' and not ligne.startswith("//"):

                                                et bien sûr supprimer la partie replace("//",'') (juste ce replace)

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  22 octobre 2021 à 9:09:12

                                                  ça fonctionne! voici le code final pour ceux qui veulent faire pareil!

                                                  out=""
                                                  with open(filePath2) as f:
                                                      
                                                     for ligne in f:
                                                          ligne=ligne.strip()
                                                          ligne=ligne.replace('Sideboard:', '')
                                                          if ligne !='' and not ligne.startswith("//"):
                                                              n,mot=ligne.replace('SB:','').split(maxsplit=1)
                                                              out+=(mot+'\n')*int(n)
                                                          
                                                               
                                                  with open(filePath3,'w') as f:
                                                      f.write(out)

                                                  et j'ai une dernière question après j'aurai enfin finit mon script, je voudrais que une fois qu'il est fini de mettre toute les images dans le dossier, je veux qu'il créé un fichier pdf de toutes les images, ou chaque page à 9 images (pour imprimer)

                                                  voici ma fonction qui créé les images imageio

                                                   full_path = os.path.join(filePath1, name + ".png")
                                                          if os.path.exists(full_path):
                                                               number = 1
                                                               while True:
                                                                   full_path = os.path.join(filePath1, name + str(number) + ".png")
                                                                   if not os.path.exists(full_path):
                                                                       break
                                                                   number += 1
                                                          
                                                          imageio.imwrite(full_path, im_padded.astype(np.uint8))  
                                                          img_io = imageio.imread(full_path)
                                                  
                                                  # Resize image
                                                          img_io = resize(img_io, (1042, 744))
                                                  
                                                  # Write ICO image
                                                          imageio.imwrite(full_path, img_io)   
                                                          os.chmod(full_path, 0o777)

                                                  j'ai vu ce script mais impossible d'appeler la fonction "j'ai fait import nom_du_script"

                                                  https://github.com/wizard1989/Unite-multiple-pictures-into-pdf

                                                  en gros elle copie plusieurs exemplaires des images selon le fichier txt et va redimensionner les images pour qu'elles rentres sur le pdf final!

                                                  merci beaucoup, je vois le bout du tunnel, enfin


                                                  -
                                                  Edité par beaudottesevran 22 octobre 2021 à 9:38:34

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    22 octobre 2021 à 16:26:14

                                                    tu as téléchargé le fichier python du git ? tu l'as mis où par rapport à ton script ? si dans le même dossier, un "import unite_pictures_into_pdf" et l'appeler via unite_pictures_into_pdf.unite_pictures_into_pdf()

                                                    et installer le module reportlab utilisé par le code de la fonction

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      22 octobre 2021 à 20:41:22

                                                      c'est bon, j'ai trouvé un code qui marche très bien mais y'a un problème, je veux 3 images par ligne et donc 9 images par page, j'ai beau lui dire, il me met 4 images par lignes, ce qui fait que la 4eme est coupé...

                                                      avez vous une idée?

                                                          class MyFPDF(FPDF):
                                                               pass
                                                          def photos_pdf():
                                                              pdf = MyFPDF("P", format='A4', unit='mm')
                                                              photos = glob.glob(filePath1 + "/*")
                                                              
                                                          
                                                              x = 5 # marge gauche
                                                              y = 5 # marge haute
                                                              counter = 0
                                                              nbre = 3 # NOMBRE DE VIGNETTES PAR LIGNES
                                                              nbre_par_page = 9
                                                              counter2 = 0
                                                              pdf.add_page()
                                                              for photo in photos:
                                                                  if counter2 != nbre_par_page:    
                                                                      if counter != (nbre):
                                                                          pdf.image(photo, x=x, y=y, w=63, h=88)
                                                                          x += 68
                                                                          counter += 1
                                                                          counter2 += 0
                                                                      else:
                                                                          pdf.image(photo, x=x, y=y, w=63, h=88)
                                                                          counter = 0
                                                                          x = 5
                                                                          y += 90
                                                                  else:
                                                                      pdf.add_page()
                                                                      counter = 0
                                                                      counter2 = 0
                                                                      x = 5
                                                                      y = 5
                                                              pdf.output(path2 + "/A4_cards.pdf", 'F')
                                                              os.chmod(path2 + "/A4_cards.pdf", 0o777)
                                                          photos_pdf()



                                                      -
                                                      Edité par beaudottesevran 23 octobre 2021 à 14:46:53

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        25 octobre 2021 à 14:23:25

                                                        ton counter2 n'est jamais incrémenter (tu lui ajoutes juste 0 en ligne 21) et il devrait être incrémenter dans tes 2 parties du if counter !=nbre (ou une fois après ce bloc if; ce qui fait en plus que tu n'ajoutes jamais de pages (ligne 28)
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        aide changer nombre et repeter la ligne

                                                        × 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