Подавить разрыв строки в файле .write - PullRequest
2 голосов
/ 01 декабря 2009

При записи в текстовый файл некоторые из экземпляров file.write сопровождаются переводом строки в выходном файле, а другие - нет. Я не хочу разрывов строк, кроме случаев, когда я говорю, что они происходят. Код:

    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

Чего мне не хватает?

Обновление

Я должен был понять, как код вставляется в SO. По какой-то причине в последней строке было несколько пробелов и табуляций, так что в TextMate он визуально появился за пределами цикла "for word ...", но интерпретатор рассматривал его как часть этого петля. Преобразование пробелов во вкладки решило проблему.

Спасибо за ваш вклад.

Ответы [ 4 ]

7 голосов
/ 01 декабря 2009

file.write() не добавляет никаких новых строк, если строка, которую вы пишете, не содержит \n s.

Но вы вводите новую строку для каждого слова в вашем списке слов, используя out.write("\n"), это то, что вы хотите?

    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!

Возможно, вы отступили out.write("\n") слишком далеко ???

1 голос
/ 01 декабря 2009

Возможно, вам потребуется выполнить strip() для каждого wc[word]. Печать одного элемента из wc, вероятно, будет достаточной, чтобы определить, есть ли уже разрывы строк в тех элементах, которые вызывают такое поведение.

Либо это, либо отступ на вашем последнем out.write("\n") не соответствует тому, что вы намеревались сделать.

1 голос
/ 01 декабря 2009

Вы пишете разрывы строк после каждого слова:

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

Это разрывы строк, которые вы видите, или есть дополнительные?

0 голосов
/ 01 декабря 2009

Я думаю, что ваш отступ неправильный.

(также я взял на себя смелость сделать ваше условие if избыточным и сделать код более читабельным:)

for doc,wc in wordcounts.items()
   out.write(doc)
   for word in wordlist:
     out.write("\t%d" % wc.get(word,0))
   out.write("\n")
...