Pergunta

Ao escrever para um arquivo de texto, alguns dos casos file.write são seguidos por uma quebra de linha no arquivo de saída e outras não. I não quer quebras de linha, exceto quando eu digo a eles para ocorrer. Código:

    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

O que eu estou ausente?

Atualizar

Eu deveria ter tomado uma pista de como o código colado no SO. Por alguma razão, houve uma mistura de espaços e separadores na linha final, de tal forma que no TextMate que visualmente apareceu fora do "por palavra ...", mas ciclo o intérprete foi tratá-la como parte de esse ciclo. Converter espaços em tabulações resolveu o problema.

Obrigado por sua entrada.

Foi útil?

Solução

file.write() não acrescenta quaisquer novas linhas, se a cadeia que escrever não contém quaisquer \ns.

Mas você forçar uma nova linha para cada palavra em sua lista de palavras usando out.write("\n"), é isso que você quer?

    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!

Talvez você recuado out.write("\n") longe demais ???

Outras dicas

Você escreve uma linha pausas após cada palavra:

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

São estas as quebras de linha que você está vendo, ou existem outros mais adicionais?

Você pode precisar executar uma strip() em cada wc[word]. Imprimindo um único item da wc é provavelmente seria suficiente para determinar se já existem quebras de linha sobre os itens que área causando esse comportamento.

Ou isso ou o recuo em seu out.write("\n") final é não fazer o que você pretendia fazer.

Eu acho que seu recuo é errado.

(também tomei a liberdade de fazer o seu se redundante cláusula e código mais legível:)

for doc,wc in wordcounts.items()
   out.write(doc)
   for word in wordlist:
     out.write("\t%d" % wc.get(word,0))
   out.write("\n")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top