Python добавляет дополнительную выходную строку для вывода

Входной файл: a.txt

 aaaaaaaaaaaa bbbbbbbbbbb cccccccccccc 

Код python:

 with open("a.txt") as f: for line in f: print line 

Проблема:

 [root@a1 0]# python read_lines.wsgi aaaaaaaaaaaa bbbbbbbbbbb cccccccccccc 

так как вы можете видеть, что на выходе есть дополнительная линия между каждым элементом.

Как предотвратить это?

  • В чем же разница между мелкой копией, глубокой копией и нормальной работой присваивания?
  • IOError: Нет такого файла или каталога, записывающего в файл в домашнем каталоге
  • Как перемещать файлы в облачном хранилище Google из одного ведра в другое ведро Python
  • Накопитель Google App Engine: работа с возможной согласованностью
  • Идеальная пересылка - в Python
  • Как создать таймер на python
  • В Python, как работает цикл for с диапазоном?
  • Понимание того, как создать кучу в Python
  • 5 Solutions collect form web for “Python добавляет дополнительную выходную строку для вывода”

    print добавляет новую строку, а строки ввода уже заканчиваются символом новой строки.

    Стандартное решение состоит в том, чтобы выводить строки ввода дословно:

     import sys with open("a.txt") as f: for line in f: sys.stdout.write(line) 

    PS : для Python 3 (или Python 2 с функцией печати) решение abarnert print(…, end='') является самым простым.

    Как объясняют другие ответы, каждая строка имеет новую строку; когда вы print голую строку, она добавляет строку в конец. Существует два пути: все остальное – вариация на те же две идеи.


    Во-первых, вы можете стирать новые строки по мере их чтения:

     with open("a.txt") as f: for line in f: print line.rstrip() 

    Это разделит любые другие пробелы, например пробелы или вкладки, а также новую строку. Обычно вас это не волнует. Если вы это сделаете, вы, вероятно, захотите использовать универсальный режим новой строки и отключите новые строки:

     with open("a.txt", "rU") as f: for line in f: print line.rstrip('\n') 

    Тем не менее, если вы знаете, что текстовый файл будет, скажем, файлом новой строки Windows, или файлом, написанным на основе «какой-нибудь-платформы-я-на-праве-сейчас-новой», вы можете лишить соответствующие окончания в явном виде:

     with open("a.txt") as f: for line in f: print line.rstrip('\r\n') with open("a.txt") as f: for line in f: print line.rstrip(os.linesep) 

    Другой способ сделать это – оставить оригинальную новую строку и просто не печатать лишний. Хотя вы можете это сделать, написав sys.stdout с помощью sys.stdout.write(line) , вы также можете сделать это из самой print .

    Если вы просто добавляете запятую в конец инструкции print , вместо печати новой строки она добавляет «умное пространство». То, что это значит, немного сложно, но идея должна состоять в том, что она добавляет пространство, когда это нужно, и ничего, когда это не должно. Как и большинство алгоритмов DWIM, это не всегда правильно, но в этом случае он делает:

     with open("a.txt") as f: for line in f: print line, 

    Конечно, мы теперь предполагаем, что новые строки файла соответствуют вашим терминалам – если вы попробуете это с помощью, скажем, классических файлов Mac на терминале Unix, вы получите печать каждой строки на последней. Опять же, вы можете обойти это, используя универсальные новые строки.

    В любом случае, вы можете избежать магии интеллектуального пространства DWIM с помощью функции печати вместо оператора печати. В Python 2.x вы получите это, используя объявление __future__ :

     from __future__ import print_function with open("a.txt") as f: for line in f: print(line, end='') 

    Или вы можете использовать стороннюю библиотеку-обертку, например, six , если хотите.

    Что происходит, так это то, что каждая строка в качестве новой строки в конце и оператор print в python также добавляет новую строку. Вы можете отключить новые строки:

     with open("a.txt") as f: for line in f: print line.strip() 

    Вы также можете попробовать splitlines() , она автоматически splitlines() :

     f = open('a.txt').read() for l in f.splitlines(): print l 

    Он не добавляет новую строку, но каждая отсканированная строка из вашего файла имеет завершающую.

    Пытаться:

     with open ("a.txt") as f: for line in (x.rstrip ('\n') for x in f): print line 
    Python - лучший язык программирования в мире.