2009-08-13 7 views
1
class __init__: 
    path = "articles/" 
    files = os.listdir(path) 
    files.reverse() 

    def iterate(Files, Path): 

     def handleXml(content): 

      months = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] 

      parse = re.compile('<(.*?)>(.*?)<(.*?)>').findall(content) 
      day = parse[1][1] 
      month = months[int(parse[2][1])] 
      dayN = parse[3][1] 
      year = parse[4][1] 
      hour = parse[5][1] 
      min = parse[6][1] 
      amPM = parse[7][1] 
      title = parse[9][1] 
      author = parse[10][1] 
      article = parse[11][1] 
      category = parse[12][1] 

     if len(Files) > 5: 
      del Files[5:] 

     for file in Files: 
      file = "%s%s" % (Path, file) 
      f = open(file, 'r') 
      handleXml(f.read()) 
      f.close() 

    iterate(files, path) 

Il s'exécute au démarrage, et si je vérifie le tableau de fichiers, il contient tous les noms de fichiers. Mais quand je les traverse, ils ne fonctionnent tout simplement pas, ils affichent seulement le premier. Si je retourne un fichier, je ne reçois que les deux premiers, et si je retourne analyser même sur des fichiers en double, il n'est pas identique. Rien de tout cela n'a de sens. J'essaye de créer un blog simple en utilisant Python, et comme mon serveur a une très ancienne version de Python, je ne peux pas utiliser des modules comme glob, tout doit être aussi basique que possible.Python en boucle pour lire et analyser tous dans un répertoire

Le tableau de fichiers contient tous les fichiers dans le répertoire, ce qui est assez bon pour moi. Je n'ai pas besoin de passer par d'autres répertoires dans le répertoire des articles. Mais quand j'essaie de sortir l'analyse, même sur des fichiers en double, j'obtiens des résultats différents.

Merci,

  • Tom
+0

Le code que vous avez publié n'appelle pas la fonction iterate() et n'imprime rien. S'il vous plaît poster le code complet. –

+0

En outre, l'indentation semble incorrecte, ce qui est évidemment très important en Python. S'il vous plaît essayez de le réparer afin qu'il ressemble exactement à ce qu'il fait dans votre éditeur de texte. –

Répondre

1

pourrait-il être à cause de:

del Files[5:] 

Il supprime les 5 dernières entrées de la liste originale ainsi. Au lieu d'utiliser del, vous pouvez essayer:

for file in Files[:5]: 
    #... 
+0

N'a pas fonctionné, mais une bonne façon de supprimer deux lignes et de conserver le tableau d'origine. Merci – Tom

0

Comme indiqué dans les commentaires, il manque la récursion réelle.
Même s'il est présent dans un autre endroit du code, l'appel récursif est l'endroit typique où les choses sont fausses, et pour cette raison, je vous suggère de vérifier. Toutefois, pourquoi n'utilisez-vous pas os.walk? Il parcourt tout le chemin, sans avoir besoin de réinventer la roue (récursive). Il a été introduit en 2.3, cependant, et je ne sais pas quel âge a votre python.

+0

mon tableau n'est pas le problème, c'est quelque chose d'autre. Si j'imprime le tableau, il montre tous les fichiers. – Tom

+0

Pouvez-vous s'il vous plaît vérifier la longueur de la matrice? Je demande parce qu'il pourrait y avoir la chance que vous ayez un tableau de 1-2 éléments de chaîne avec tous les noms de fichiers séparés par des espaces. –