Frage

Wenn in einer Textdatei zu schreiben, sind einige der file.write Instanzen durch einen Zeilenumbruch in der Ausgabedatei gefolgt und andere nicht. I nicht wollen Zeilenumbrüche außer, wo ich ihnen sagen, auftreten. Code:

    for doc,wc in wordcounts.items(): 
        out.write(doc)             #this works fine, no linebreak
        for word in wordlist: 
            if word in wc: out.write("\t%d" % wc[word]) #linebreaks appear
            else: out.write("\t0")                      #after each of these
        out.write("\n")        #this line had mixed spaces/tabs

Was bin ich fehlt?

Aktualisieren

Ich hätte eine Ahnung davon, wie der Code eingefügt in SO genommen. Aus irgendeinem Grunde war es eine Mischung aus Leerzeichen und Tabulatoren in der letzten Zeile so, dass in Textmate es visuell außerhalb des „für Wort ...“ erschien schlaufen aber der Dolmetscher behandelte es als Teil dass Schleife. Konvertieren von Leerzeichen zu Tabulatoren wurde das Problem behoben.

Vielen Dank für Ihre Eingabe.

War es hilfreich?

Lösung

file.write() fügt keine Zeilenumbrüche, wenn die Zeichenfolge, die Sie schreiben, enthalten keinen \ns.

Aber Sie eine neue Zeile erzwingen für jedes Wort in der Wortliste mit out.write("\n"), ist das, was Sie wollen?

    for doc,wc in wordcounts.items(): 
        out.write(doc)             #this works fine, no linebreak
        for word in wordlist: 
            if word in wc: out.write("\t%d" % wc[word]) #linebreaks appear
            else: out.write("\t0")                      #after each of these
            out.write("\n") #<--- NEWLINE ON EACH ITERATION!

Vielleicht haben Sie gegliederten out.write("\n") zu weit ???

Andere Tipps

Sie schreiben einen Zeilenumbruch nach jedem Wort:

for word in wordlist:
    ...
    out.write("\n")

Sind diese die Zeilenumbrüche Sie sehen, oder gibt es mehrere zusätzliche diejenigen?

Sie müssen möglicherweise eine strip() auf jedem wc[word] auszuführen. ein einzelnes Element aus wc Druck ist wahrscheinlich, wenn es würde ausreichen, um bereits auf diesem Artikel Zeilenumbrüche dieses Bereich dieses Verhalten verursacht zu bestimmen.

Entweder das, oder die Vertiefung auf der endgültigen out.write("\n") tut nicht, was Sie es zu tun gedenke.

Ich denke, Ihre Vertiefung falsch ist.

(Ich habe auch die Freiheit, um Ihr, wenn Klausel überflüssig und Code besser lesbar:)

for doc,wc in wordcounts.items()
   out.write(doc)
   for word in wordlist:
     out.write("\t%d" % wc.get(word,0))
   out.write("\n")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top