2016-04-01 1 views
0

Ich verwende Python pattern.web-Modul, um einige grundlegende Web-Mining-Aufgaben durchzuführen. Ich versuche, nur die ersten 15 Schlüsselwörter zu extrahieren und jedes Schlüsselwort mit einem Komma "," anzufügen. Also, meine resultierende Datei enthält eine Liste von Schlüsselwörtern, die wie folgt aussieht: JetztDOM Parsing eines Dokuments: Hinzufügen und Entfernen von Komma basierend auf Bedingung

scallops, scallop shells, sea scallops, scallop shell, how to cook scallops, scallop shells for sale, frozen scallops, fresh scallops, dry scallops, cooking scallops, baptism shell, scallop recipe, large scallop shells, diver scallops, bay scallops, 

, ich will nicht das Komma "," nach dem 15./letzte Stichwort "bay scallops," Ich brauche ein wenig Hilfe mein Code ändern unten, so dass Bei der 15. Iteration fügt der Code das Komma nicht hinzu. Wenn es eine einfache for-Schleife wäre, die ein Array iteriert, könnte ich iteritems() verwenden, um Schlüssel und Wert zu extrahieren und eine if-Bedingung hinzuzufügen, aber hier kann ich nicht herausfinden, wie es geht.

from pattern.web import URL, DOM, plaintext, extension 

folder = '../some_folder' 

dom = DOM(content) 
print "traversing ... " 
for e in dom('td.spgb-f')[:15]: 
    for a in e('span.sptc-e'): 
     File = open(os.path.join(folder, "meta_keywords.html"), mode="a") 
     print ('adding %s' %(plaintext(a.content))) 
     File.write(plaintext(a.content) + ", ") 
     File.close() 

Antwort

2

Anstatt darüber nachzudenken, ein Komma (Ihr Trennzeichen) bei jeder Iteration anzuhängen, betrachten Sie es andersherum als ein ausstehendes Trennzeichen, das als leer beginnt und dann als Kommawert am Ende des ersten gesetzt wird Iteration Ihrer Schleife.

separator='' 
for e in dom('td.spgb-f')[:15]: 
    for a in e('span.sptc-e'): 
     ... 
     print (separator + 'adding %s' %(plaintext(a.content))) 
     separator = ', ' 
+0

Sorry, ich habe Ihre Antwort nicht sehen, bevor ich gepostet habe. Meins ist im Wesentlichen das Gleiche. :) –

1

Anstatt jede einzelne Saite in die Datei zu schreiben, können Sie sie zu einer Liste hinzuzufügen, ohne das Komma und verwenden ", ".join(your_list_here) die Zeichenfolge zu erstellen, die in die Datei geschrieben werden. Die Methode join sorgt dafür, dass das Komma nur zwischen den Elementen platziert wird.

3

würde ich Lauro Antwort empfehlen, aber in einigen Fällen eine solche Liste möglicherweise nicht in den Speicher passen und ein „Streaming“ Ansatz ist besser.

Dann können Sie diese stattdessen versuchen:

first = True 
file = open(...) 
for a in e('span.sptc-e'): 
    if not first: 
     file.write(", ") 
    file.write(plaintext(a.content) + ", ") 
    first = False 
file.close() 

Sie halten das Öffnen und Schließen der Datei, die nicht notwendig ist. Sie können es vor Ihrer Schleife öffnen und dann schließen, wenn Sie fertig sind. Der beste Weg, dies zu tun, ist oft eine `mit 'Block zu verwenden:

with open(...) as file: 
    file.write(...) 
# The file is automatically closed after the block 
+0

Ich habe dich gewählt –

+0

Vielen Dank, ich schätze es. –

Verwandte Themen