Question

Lors de l'écriture dans un fichier texte, certaines occurrences de file.write sont suivies d'un saut de ligne dans le fichier de sortie et d'autres non. Je ne veux pas de sauts de ligne sauf où je leur dis de se produire. 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

Qu'est-ce qui me manque?

Mettre à jour

J'aurais dû prendre un indice sur la manière dont le code est collé dans SO. Pour une raison quelconque, il y avait un mélange d'espaces et de tabulations dans la dernière ligne, de sorte que, dans TextMate, visuellement apparaissait en dehors du "mot pour ...". boucle & # 8212; mais l'interprète la traitait comme faisant partie de cette boucle. La conversion des espaces en onglets a résolu le problème.

Merci pour votre contribution.

Était-ce utile?

La solution

file.write () n'ajoute pas de nouvelles lignes si la chaîne que vous écrivez ne contient pas de \ n s.

Mais vous forcez un saut de ligne pour chaque mot de votre liste de mots avec out.write ("\ n") , est-ce ce que vous voulez?

    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!

Peut-être avez-vous mis en retrait out.write ("\ n") trop loin ???

Autres conseils

Vous écrivez un saut de ligne après chaque mot:

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

S'agit-il des sauts de ligne que vous voyez ou y en a-t-il d'autres?

Vous devrez peut-être exécuter un strip () sur chaque wc [mot] . L'impression d'un seul élément à partir de wc suffirait probablement pour déterminer s'il existe déjà des sauts de ligne sur les éléments présentant ce comportement.

Cela ou l'indentation sur votre final.write ("\ n") final ne fait pas ce que vous souhaitiez.

Je pense que votre mise en retrait est fausse.

(J'ai également pris la liberté de rendre votre clause if redondante et votre code plus lisible:)

for doc,wc in wordcounts.items()
   out.write(doc)
   for word in wordlist:
     out.write("\t%d" % wc.get(word,0))
   out.write("\n")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top