Вопрос

При записи в текстовый файл часть файла удаляется.за экземплярами 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 ...", но интерпретатор обрабатывал его как часть этого цикла.Преобразование пробелов в табуляции решило проблему.

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

Это было полезно?

Решение

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

Но вы вводите новую строку для каждого слова в вашем списке слов, используя 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") слишком далеко???

Другие советы

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

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

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

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

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

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

(также я взял на себя смелость сделать ваше предложение 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")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top