Partage
  • Partager sur Facebook
  • Partager sur Twitter

str objet it not callabe

Sujet résolu
    21 septembre 2019 à 11:51:44

    je comprend po
    from datetime import date
    
    
    
    
    
    
    
    
    
    
    ExtractionFichiez = []
    Contenue_fichiez = []
    while len(ExtractionFichiez) > 0 : ExtractionFichiez.pop()
    while len(Contenue_fichiez) > 0 : Contenue_fichiez.pop()
    y = 0
    
    with open("data.txt", 'r') as filin:
        lignes = filin.readlines()
    
    ExtractionFichiez = list(lignes)
    
    for i in range(len(ExtractionFichiez)):
        y = str(ExtractionFichiez[-1])
        y = y.strip()
        del ExtractionFichiez[-1]
        Contenue_fichiez.append(y)
    
    Contenue_fichiez.reverse()
    
    while len(ExtractionFichiez) > 0 : ExtractionFichiez.pop()
    
    
    
    
    
    
    
    
    for i in range(len(lignes)):
        texte = str(Contenue_fichiez[i])
        date = texte[ : 10]
        x = texte.find("\\") + 1
        texte = texte[int((x + 1) - 1) : ]
        x = texte.rfind("\\") + 1
        matiere = texte[ : int(x - 1)]
        nom_du_controle = texte[int((x + 1) - 1) : ]
        print(date)
        print(matiere)
        print(nom_du_controle)
        print(" ")
    
    
    
    
    
    
    
    j = date[ :2]
    m = date[3:5]
    a = date[6: ]
    
    print(j)
    print(m)
    print(a)
    j = float(j)
    m = float(m)
    a = float(a)
    
    
    
    d0 = date(a ,m, j)
    d1 = date(2019 ,9, 22)
    delta = d1 - d0
    print(delta.days)
    • Partager sur Facebook
    • Partager sur Twitter
      21 septembre 2019 à 13:32:57

      Je t'ai mis des commentaires, quelques incompréhensions sur le fond sont à éclaircir.

      Sur la forme et la logique, du travail reste à faire,

      from datetime import date
      
      
      #  Beaucoup trop d'espaces
      
      
      
      
      
      
      
      ExtractionFichiez = [] #  inutile on crée cette variable ligne 20
      Contenue_fichiez = []
      while len(ExtractionFichiez) > 0 : ExtractionFichiez.pop() #  inutile, ligne 12 cette liste est censée être vide
      while len(Contenue_fichiez) > 0 : Contenue_fichiez.pop() #  idem, avec ligne 13
      y = 0 #  inutile, la variable y est créée ligne 24
      
      # lignes = []
      with open("data.txt", 'r') as filin:
          lignes = filin.readlines() # attention, en fin de ligne on a des '\n', ne pas l'oublier
          # for ligne in filin:
          # lignes.append(ligne)
      
      ExtractionFichiez = list(lignes) # inutile, readlines, retourne déjà une liste
      
      # dans ce bloc for, que doit-on faire exactement
      for i in range(len(ExtractionFichiez)):
          y = str(ExtractionFichiez[-1])
          y = y.strip()
          del ExtractionFichiez[-1]
          Contenue_fichiez.append(y)
      
      Contenue_fichiez.reverse()  # si on fait ça, autant dans le bloc
                                  # précédent ajouter les éléments y depuis le début de ExtractionFichiez
      
      while len(ExtractionFichiez) > 0 : ExtractionFichiez.pop()  # ExtractionFichiez = [] suffira bien
      
      
      
      
      #  Trop d'espaces
      
      
      
      # for ligne in lignes: ...
      for i in range(len(lignes)): # Pourquoi ne pas itérer directement sur les éléments de la liste lignes
          texte = str(Contenue_fichiez[i]) # Contenue_fichiez[i] est cencée être une chaîne de caractères, str est inutile
          
          # Cette partie doit être expliquée, quel est le résultat attendu ?
          date = texte[ : 10] # Tu écrases le module date, attention !!!
          x = texte.find("\\") + 1
          texte = texte[int((x + 1) - 1) : ]
          x = texte.rfind("\\") + 1
          matiere = texte[ : int(x - 1)]
          nom_du_controle = texte[int((x + 1) - 1) : ]
          print(date)
          print(matiere)
          print(nom_du_controle)
          print(" ")
      
      
      
      # Trop d'espaces
      
      
      
      j = date[ :2]
      m = date[3:5]
      a = date[6: ]
      
      print(j)
      print(m)
      print(a)
      j = float(j)
      m = float(m)
      a = float(a)
      
      
      
      d0 = date(a ,m, j)  #  cela ne peut pas fonctionner
                          # cette variable ne correspond plus à l'objet Date à cause de ligne 50.
      d1 = date(2019 ,9, 22)  # idem que plus haut
      delta = d1 - d0
      print(delta.days)



      -
      Edité par fred1599 21 septembre 2019 à 13:34:38

      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        21 septembre 2019 à 16:15:23

        En gros, on a un fichier composer de sa 

        :xx-xx-xxxx\x\y

        :xx-xx-xxxx\x\y

        :xx-xx-xxxx\x\y 

        et sa a l'infinie, le but est de prendre la date date dedans ( xx-xx-xxxx ) est de la soustraire a la date actuelle, pour savoir combien de jour il reste entre,il y a ptet un meuilleur moyen de trouver comment faire , par ocntre j'ai pas tout compris dans ton optimitation de mon code 

        ( j'ai que deux semaine de python sous le bras...)

        • Partager sur Facebook
        • Partager sur Twitter
          21 septembre 2019 à 17:47:18

          Il faut que tu fasses comme tu as appris, et je ne sais pas comment, dans tous les cas, tant que ça fait le café, c'est déjà très bien...

          Après pour ton problème, tu as une ligne du style :xx-xx-xxxx\x\y

          En prenant ton interpréteur python, on peut faire des tests sur une ligne et voir comment là manipuler.

          Voici quelques détails

          from datetime import date
          
          ligne = ":25-02-2019\\x\\y"
          
          str_date = ligne[1:11] # on appelle cela le slicing, on récupère la chaîne entre index 1 et (11-1)
          print(str_date) #  "25-02-2019"
          
          date_split = list(map(int, str_date.split('-')))  # map va permettre de transformer en entier les chaînes à l'intérieur
                                                      # de la liste str_date
          
          print(date_split) #  [25, 2, 2019]
          
          d = date(*reversed(date_split)) #  2019-02-25
          today = date.today() # date d'ajourd'hui
          delta = date.today() - d
          print(delta.days) #  208 jours entre aujourd'hui et le 25/02/2019

          Avec ça tu devrais plutôt t'en sortir pas mal je pense...

          -
          Edité par fred1599 21 septembre 2019 à 17:49:52

          • Partager sur Facebook
          • Partager sur Twitter

          Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
          La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

            21 septembre 2019 à 17:49:53

            en gros pour moi c'est ce code la 

            for i in range(len(lignes)):
                texte = str(Contenue_fichiez[i])
                P = texte[ : 10]
                x = texte.find("\\") + 1
                texte = texte[int((x + 1) - 1) : ]
                x = texte.rfind("\\") + 1
                matiere = texte[ : int(x - 1)]
                nom_du_controle = texte[int((x + 1) - 1) : ]
                print(P)
                print(matiere)
                print(nom_du_controle)
                print(" ")

            tu comprend ?

            ( pour decomposer le fichiez ) 

            -
            Edité par PigiTruc1 21 septembre 2019 à 17:54:23

            • Partager sur Facebook
            • Partager sur Twitter

            str objet it not callabe

            × 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