Как и другие ответы объяснить, каждая строка имеет символ новой строки; когда вы 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, символ новой строки файла, или уроженцем к -whichever-платформа-я-обкатка на правой теперь новой строки файла, вы можете раздеться соответствующие окончаний в явном виде:
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
, вместо печати новой строки она добавляет «умное пространство». Exactly what that means немного сложнее, но предполагается, что он добавляет пространство, когда ему нужно, и ничего, когда этого не должно быть. Как и большинство алгоритмов DWIM, это не всегда получается все правильно, но в этом случае он делает:
with open("a.txt") as f:
for line in f:
print line,
Конечно мы теперь предположить, что новые строки файла соответствуют вашему terminal's-если вы попробуете это, скажем, классические файлы 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
, если вы предпочитаете.
OP явно использует Python 2, и я не уверен, что предложение 'print_function' для пользователей 2.x всегда является хорошей идеей. И использование магического мягкого пространства 'print', вероятно, является плохой идеей, если вы не впервые узнаете, что это значит и как это работает. Это означает, что ваш явный 'write' может быть лучшим ответом (поэтому я поддержал ваш ответ и думаю, что OP был прав, чтобы принять его). – abarnert
REF https://docs.python.org/2/library/functions.html#print –