Я пытаюсь создать простой редактор файлов на Python через консоль (называемую PyCons). Вот моя текущая программа:
def PyCons(f):
file = open(f, "r")
appe = open(f, "a")
print("\n=====\nPyCons Editor, v1.2\nPython 3.6.1\n")
global i
i = 0
for line in file:
i += 1
print(" {}| ".format(i) + line, end='')
for k in range(10000000000000):
print("\n {}| ".format(i+1), end='')
inp = input("")
if inp == "@PyCons.save()":
print("\n==== = ")
break
else:
i += 1
appe.write("\n" + inp)
Я использовал метод end, чтобы убедиться, что существующий код в файле был правильно напечатан в его строчном формате, но функция input не имеет атрибута end. Итак, когда я иду вводить код в редакторе:
PyCons("magic.html")
...
=====
PyCons Editor, v1.2
Python 3.6.1
1| <p>Hello!</p>
2| <h1>Big text!</h1>
3| <h2>Smaller text!</h2>
#Should be no spaces here
4| <p>More stuff!</p>
#No spaces here either
5| @PyCons.save()
=====
... Я получаю большие неприятные промежутки между моими входами. Кто-нибудь знает способ подавить вывод этого пространства, аналогичный методу end='', используемому для print function?
Обновлено: расположение проекта для справки: https://repl.it/@xMikee/File-Editing
Возможный дубликат Можно ли получить ввод пользователя без вставки новой строки?
Это не ясно, но я думаю, что его проблема может заключаться в том, что в терминале печатаются новые строки, а не только выходной OP записывает на диск. Если это так - не передавайте строку, назовите ее input() вместо input(""), это может решить вашу проблему.
@lenik Это, к сожалению, не помогло.
@DillonDavis Это тоже не сработало.






Новые строки из входов - это просто локальные эхо из консоли. Вы видите их на своем экране, но на самом деле они не возвращаются функцией input.
Настоящая проблема заключается в переводе строки, который вы явно печатаете перед каждым номером строки. Удалите \n, чтобы строка с номерами строк стала:
print(" {}| ".format(i+1), end='')
Кроме того, загружаемый файл может не обязательно иметь завершающую новую строку в конце, поэтому вам нужно обнаружить это и напечатать новую строку, если это так. Обратите внимание на то, что я добавил после вашего первого цикла for:
def PyCons(f):
file = open(f, "r")
appe = open(f, "a")
print("\n=====\nPyCons Editor, v1.2\nPython 3.6.1\n")
global i
i = 0
for line in file:
i += 1
print(" {}| ".format(i) + line, end='')
if not line.endswith('\n'):
print()
for k in range(10000000000000):
print(" {}| ".format(i+1), end='')
inp = input("")
if inp == "@PyCons.save()":
print("\n==== = ")
break
else:
i += 1
appe.write("\n" + inp)
Это не работает из-за того, что я использую end='' (он делает так, что новый ввод находится в той же строке, что и предыдущий).
Это действительно работает. Я сам пробовал ваш код с этим изменением. Вы пробовали?
Может быть, вставить print("") между циклами for, а затем удалить новую строку?
@connectyourcharger Ну, а зачем вы вообще печатали \n перед каждым номером строки?
@blhsing Потому что, если я этого не сделаю, произойдет следующее: 4| <p>More stuff!</p> 5|, потому что я поместил end отпечатка в ''
@connectyourcharger Но ваш ввод с клавиатуры дает вам новые строки локально, когда вы вводите и нажимаете Enter, поэтому вам не нужно печатать новые строки из кода.
@blhsing Использование end='' в операторе печати технически помещает начало «новой строки» в конец старой.
@connectyourcharger Дело в том, что вы позволяете пользователю вводить новую строку в качестве ввода после отображения номера строки в качестве приглашения, поэтому, когда пользователь видит `3 | `в качестве приглашения и набирает <h2>Smaller text!</h2>, а затем нажимает Входить, нажатие клавиши Enter переводит курсор на новую строку из-за локального эха.
@blhsing Не могли бы вы дать ссылку на вашу отредактированную программу, которая работает?
@connectyourcharger Моя отредактированная программа - не что иное, как удаление \n из вашей линии print("\n {}| ".format(i+1), end=''). Но теперь я понимаю, в чем может быть ваша проблема. В загружаемом файле может не быть завершающей строки новой строки в конце, поэтому вам нужно напечатать новую строку самостоятельно, если это так.
Позвольте нам продолжить обсуждение в чате.
@connectyourcharger Я только что отредактировал свой ответ предложением, которое только что сделал, чтобы учесть отсутствие завершающей новой строки в загружаемом файле. Тогда попробуйте.
inp = input("").strip('\n')должен помочь