Domanda

Quando si scrive su un file di testo, alcune istanze di file.write sono seguite da un'interruzione di riga nel file di output e altre no. Non non voglio interruzioni di linea, tranne dove dico che si verificano. Codice:

    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

Cosa mi sto perdendo?

Aggiorna

Avrei dovuto prendere un indizio da come il codice è stato incollato in SO. Per qualche motivo c'era una combinazione di spazi e tabulazioni nella riga finale, in modo tale che in TextMate visivamente appariva al di fuori di " per parola ... " loop: ma l'interprete lo trattava come parte di quel loop. La conversione di spazi in schede ha risolto il problema.

Grazie per il tuo contributo.

È stato utile?

Soluzione

file.write () non aggiunge alcuna nuova riga se la stringa che scrivi non contiene alcun \ n s.

Ma imponi una nuova riga per ogni parola nel tuo elenco di parole usando out.write (" \ n ") , è quello che vuoi?

    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!

Forse hai indentato out.write (" \ n ") troppo lontano ???

Altri suggerimenti

Scrivi un'interruzione di riga dopo ogni parola:

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

Sono queste le interruzioni di linea che stai vedendo o ce ne sono altre aggiuntive?

Potrebbe essere necessario eseguire una strip () su ogni wc [word] . La stampa di un singolo elemento da wc è probabilmente sufficiente per determinare se ci sono già interruzioni di riga su quegli elementi in quell'area che causano questo comportamento.

O quello o il rientro sul tuo out.write finale (" \ n ") non stanno facendo quello che volevi.

Penso che il tuo rientro sia sbagliato.

(ho anche preso la libertà di rendere la tua clausola if ridondante e il codice più leggibile :)

for doc,wc in wordcounts.items()
   out.write(doc)
   for word in wordlist:
     out.write("\t%d" % wc.get(word,0))
   out.write("\n")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top