Дополнительная линия вывода при печати внутри цикла

Я не могу понять, почему код # 1 возвращает лишнюю пустую строку, а код # 2 – нет. Может ли кто-нибудь объяснить это? Разница заключается в дополнительной запятой в конце кода №2.

# Code #1 file = open('tasks.txt') for i, text in enumerate(filer, start=1): if i >= 2 and i <= 4: print "(%d) %s" % (i, text) # Code #2 file = open('tasks.txt') for i, text in enumerate(filer, start=1): if i >= 2 and i <= 4: print "(%d) %s" % (i, text), 

Вот содержимое моего файла tasks.txt:

 line 1 line 2 line 3 line 4 line 5 

Результат из кода # 1:

 (2) line 2 (3) line 3 (4) line 4 

Результат из кода № 2 (желаемый результат):

 (2) line 2 (3) line 3 (4) line 4 

5 Solutions collect form web for “Дополнительная линия вывода при печати внутри цикла”

Затянувшаяся строка в заявлении на печать подавляет подачу строки. У вашего первого оператора печати его нет, второй – у вас.

Вход, который вы прочитали, по-прежнему содержит \n что вызывает дополнительную передачу строки. Один из способов компенсировать это – предотвратить печать от собственной строки, используя конечную запятую. Альтернативно, и, возможно, лучший подход, вы можете лишить новую rstrip() на входе при ее чтении (например, используя rstrip() )

Лучший общий ответ на эту проблему состоит в том, чтобы пометить конечную новую строку (если она есть!), Как только вы ее прочитали:

 f = open('tasks.txt') for i, text in enumerate(f, start=1): text = text.rstrip('\n') if i >= 2 and i <= 4: print "(%d) %s" % (i, text) 

Таким образом, вы отключите свой вывод от вашего ввода … ваш выходной код может быть на расстоянии 20 строк или в другой функции / методе или даже в другом модуле. Компенсация новой строки ввода с использованием запятой в конце инструкции печати не является надежным решением.

Чтобы не иметь пустую строку, вам нужно , в конце оператора печати

Пример:

 for i in range(10): print i, >>>0 1 2 3 4 5 6 7 8 9 for i in range(10): print i >>> 0 1 2 3 4 5 6 7 8 9 

Итерация по файлам сохраняет символы новой строки из файла. Итак, есть одна новая строка из вашей печати и одна из строки.

Хорошим способом проверки семантики файла является StringIO . Взглянуть:

 >>> from StringIO import StringIO >>> x = StringIO("abc\ncde\n") >>> for line in x: print repr(line) ... 'abc\n' 'cde\n' 

Запятая подавляет новую строку от печати, как говорит Левон, так что из строки только новая строка.

Я s.rstrip('\n') строки из строк, используя s.rstrip('\n') . Он избавляется от любых завершающих строк в любом модернизированном формате (Unix, Windows или старой Mac OS). Таким образом, вы можете сделать print "(%d) %s" % (i, text.rstrip('\n')) .

Для этого есть очень простое решение.

Допустим, для аргументов я использовал файл .txt (называемый numbers.txt), который я читаю со значениями:

 234234 777776 768768 

Затем, используя следующий код:

 filename = numbers.txt with open(filename) as file_object: for line in file_object: print(line) 

Дала бы вам лишнюю пустую строку, с которой вы столкнулись. Но с небольшим изменением вы можете избавиться от лишних пустых строк, используя метод rstrip (). Таким образом, код становится:

 filename = numbers.txt with open(filename) as file_object: for line in file_object: print(line.rstrip()) 

Теперь вы получите свои результаты без этих досадных пустых строк между ними!

  • Создание безголового экземпляра Chrome в Python
  • Массив Python не работает
  • Извлечь имя файла из пути, независимо от того, какой формат os / path
  • Как выполнить файл в интерпретаторе python?
  • Как мне группировать этот список dicts в тот же месяц?
  • GAE - Ошибка развертывания: «AttributeError: невозможно установить атрибут»
  • Возвращает значения из одного сценария в другой скрипт
  • Что происходит, если вы смешиваете старые и новые классы стиля в иерархии?
  • Python - лучший язык программирования в мире.