2016-09-24 2 views
0
  1. mon fichier d'entrée:Comment imprimer la liste clonée une fois et le charger dans le dictionnaire en Python?

    cs 124456 powerful 
    cs 124456 powerful 
    me  125454 easy 
    me 125455 easy 
    me 125455 easy 
    ec 125555 done 
    ec 127678 fine 
    ec 127678 fine 
    ci 127678 fine 
    ci 127678 fine 
    eee 125678 good 
    eee 125678 good 
    eee 125678 good 
    eee 125678 bad` 
    
  2. Sortie prévue:

    no.name reg perform 
    1.cs 124456 powerful 
    2.me 125454 easy 
    3.me 125455 easy 
    4.ec 125555 done 
    5.ec 127678 fine 
    6.ci 127678 fine 
    7.eee 125678 good 
    8.eee 125678 bad 
    
  3. mon code:

    import os 
    os.chdir("d:/filer") 
    import re   
    def first(line): 
        f=re.findall("[a-z]+",line,flags=0) 
        return f 
    def num(line): 
        n=re.findall("\d{6}",line,flags=0) 
        return n 
    with open("once.txt","r") as sa: 
        for line in sa.readlines(): 
          home=first(line) 
          number=num(line) 
          x=home[0] 
          y=number[0] 
          z=home[1] 
          if x!=0 and y!=0 and z!=0:  
          print [x,y,z] 
    
  4. Je fichier ouvert et de les lire ligne par ligne. Puis j'ai extrait ces nombres et le texte en utilisant l'expression régulière et stocké dans la liste avec des index. Maintenant, je ne veux que des listes uniques et non clonées. Puis chargez-les dans le dictionnaire. Quelqu'un peut-il m'aider?

Répondre

0

Afin d'éviter le clonage, vous pouvez utiliser un set() comme ceci:

results = set() # Construct a set 
with open("once.txt","r") as sa: 
    for line in sa.readlines(): 
      home=first(line) 
      number=num(line) 
      x=home[0] 
      y=number[0] 
      z=home[1] 
      if x!=0 and y!=0 and z!=0: 
      if (x,y,z) not in results: # Check if the set already contains the result 
       results.add((x,y,z)) # If it doesn't, add to the set and print. 
       print [x,y,z] 

Je propose également l'organisation de votre code un peu. Vous pouvez simplement créer 1 regex pour la clarté comme ceci:

results = set() # Construct a set 
with open("once.txt","r") as sa: 
    count = 0 
    for line in sa: # No need for readlines() 
     match = re.match(r"(\w+)\s+(\d+)\s+(\w+)") 

     if match is None: 
      continue 

     result = match.groups() 
     if result not in results: # Check if the set already contains the result 
      count += 1 
      results.add(result) # If it doesn't, add to the set and print. 
      print count, result