-1
votes

Comment puis-je remplacer les entrées de dictionnaire vides avec la dernière entrée

J'ai un fichier texte. Le côté gauche montre le courant d'activité actuel et le côté droit de l'usure historique. Il est séparé par un caractère de tuyau ( | code>). Il ressemble à ceci:

      Textfile=open(r"G:\....txt","r")
      d={}
      for line in Textfile:
          x=line.split("|")
          a=x[0]
          b=x[1]
          c=b.strip("\n")
          e=a.strip()
          f=e.strip("-")
          g=c.strip("-")
          d[f]=g
      print(d)


3 commentaires

Y a-t-il un \ n dans votre fichier? Ou il est juste de montrer qu'il y a une nouvelle ligne? En cas d'ancien, je peux mettre à jour la réponse. :)


Vous vraiment besoin d'utiliser de meilleurs noms de variables. Les noms de variables significatifs vous permettront de créer un code beaucoup plus facile pour les autres (y compris votre avenir) de comprendre et de maintenir. Cela dit, pandas sfrfd pourrait être une solution pour vous.


Non, il n'est pas littéral dans le fichier, désolé!


4 Réponses :


0
votes

Vous pouvez faire quelque chose comme ceci:

for line in Textfile:
    try:
        (key, value) = line.split("|")
    except ValueError:  # split() did not result in two items.
        continue        # This will deal among other with the delimiter lines ----
    key = key.strip()
    value = value.strip()
    if value:  # string is not empty after stripping
        d[key] = value
        prev_value = value  # save for next line if needed
    else:
        d[key] = prev_value  # assign last seen value as there isn't any new one


0 commentaires

0
votes

Pour accomplir cela, vous avez besoin d'une variable en dehors du champ d'application de la boucle pour la boucle, de sorte qu'elle puisse conserver les informations des boucles précédentes. Ici, nous ajoutons une variable précédente_landeuse code> qui sera mise à jour avec la dernière occurrence du côté droit du côté de la droite. Lorsqu'une ligne n'a pas de côté droit, elle utilisera cette variable pour remplir le vide, comme c'était la dernière valeur de cette colonne.

Textfile=open(r"G:\....txt","r")
d={}
previous_landuse = ''
for line in Textfile:
    x=line.split("|")

    #ignore the -------- line
    if len(x) < 2:
        continue

    key = x[0].strip()
    value = x[1].strip()

    if value == '':
        value = previous_landuse
    else:
        previous_landuse = value

    d[key] = value

print(d)


2 commentaires

Merci beaucoup ça marche !! :-)


@Leonie pas de problème, heureux d'aider! Assurez-vous de le marquer comme répondit Pls :)



0
votes

semble simple si vous utilisez des conditions. Quelque chose comme ceci: xxx


0 commentaires

0
votes

Une option à l'aide de Pandas. Je vais supposer que votre fichier texte contient ceci exactement xxx

y compris le \ n et le ------- xxx

Le contenu final de df est: xxx


0 commentaires