Elimina le interruzioni di riga su file.write
-
22-07-2019 - |
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.
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")