#python
#python
Вопрос:
У меня есть программа, которая регистрирует нажатые клавиши, а затем записывает их в текстовый файл. Проблема в том, что (может быть лучший способ) У меня есть свой код для запуска новой строки ‘n’ каждый раз, когда нажимается a (.), Но точка переходит в следующую строку вместо того, чтобы оставаться в предыдущей строке. В принципе, я не хочу, чтобы файл .txt начинал каждую новую строку с .(.)
В коде у меня нет реализованного регулярного выражения, я надеюсь, вы поможете мне с этим, а затем удалите то, что находит регулярное выражение. Это будет новая строка, начинающаяся с (точка) .
from unicurses import *
import os
def copy():
stdscr = initscr()
file = open("pressed_keys.txt", "a") # open and append file
true = True
while true:
key = getch()
addstr(chr(key))
if key == 46: # (.) period
file.write('.')
file.write('n')
# file. >> something to delete the previous key pressed
elif key not in (27, 10): # ESC key | ENTER
addstr('ASCII code for %s is %s n' % (chr(key), str(key))) # prints the key code to the terminal window
file.write(chr(key)) # writes the pressed key to the 'file'
else:
file.close()
true = False
endwin()
if os.path.isfile('./pressed_keys.txt'):
# comment the next line to not clear the file when the program runs
open('pressed_keys.txt', 'w').close()
copy()
else:
file = open('pressed_keys.txt', 'w ') # create a file if it does not exist
copy()
Комментарии:
1. Разве вы не можете просто использовать
lstrip('.')
в каждой строке?2. Где и как я мог бы реализовать это в коде?
3. @Austin,
lstrip
удаляет не только первое.
(хотя, возможно, это то, чего хочет OP).4. Имею ли я на это право? Вы хотите удалить этот символ после его записи в файл, в который вы пишете, потому что вы не понимаете, как он вообще туда попадает?
5. @Steve Когда я запускаю программу и набираю «прочитайте это.и это». Я получаю «прочитай это». затем в следующей строке я получаю «.и это». В этой второй строке я получаю (точку), от которой я хочу избавиться.
Ответ №1:
Вы сказали, что у вас проблема, потому что он пишет точку в начале строки.
Проблема в том, что вы используете if ... if ...
, но вы должны if ... elif ...
в
if key == 46: # (.) period
file.write('.')
file.write('n')
# file. >> something to delete the previous key pressed
if key != 27 | 10: # ESC key | ENTER
addstr('ASCII code for %s is %s n' % (chr(key), str(key))) # prints the key code to the terminal window
file.write(chr(key))
Сначала if
сравните dot с 46
, и он записывает "n"
в файл, но после следующего if
сравнения dot
с != 27
тем, что является true, поэтому оно записывается dot
в новой строке.
Вы должны использовать if ... elif ...
, чтобы остановить его.
if key == 46: # (.) period
file.write('.')
file.write('n')
# file. >> something to delete the previous key pressed
elif key != 27 and key != 10: # ESC key | ENTER
addstr('ASCII code for %s is %s n' % (chr(key), str(key))) # prints the key code to the terminal window
file.write(chr(key))
Кстати: key != 27 | 10
работает не так, как вы ожидаете, что вам нужно key != 27 and key != 10
или key not in (27, 10)
Комментарии:
1. при записи (27, 10) это в основном означает (27 или 10) или (27 и 10)? Также я получаю пробел после вместо точки в начале каждой строки. Если бы я должен был ввести пару предложений, я бы нажал ПРОБЕЛ после (точки), но поскольку программа записывает в новую строку после нажатия (точки). Мне не нужно, чтобы пробелы отображались, даже если я их печатаю.
2. это кортеж
(27, 10)
, поэтому он ничего не говорит. Ноkey not in (27, 10)
работает какkey != 27 and key != 10
. Безnot
(key in (27, 10)
) это будет работать такkey == 27 or key == 10
— так сnot
нимand
, безnot
негоor
3. если вам не нужно пространство, вам нужно создать
if
оператор, чтобы пропустить его. если вам не нужен пробел послеperiod
них, вы должны запомнить предыдущийkey
и проверитьif key == 32 and previous_key == 46: pass
4. Как мне запомнить предыдущий ключ? Это ново для меня, как и кортеж. Я пытаюсь создать этот регистратор ключей, собирая информацию, а не из пошагового видео.
5. как вы помните текущий ключ? у вас есть переменная
key
для этого — ie.previous_key
. Прежде чем получить новый ключkey = getch()
, вы должны сохранить старый ключ в этой переменнойprevious_key = key
. Также может потребоваться некоторое значение дляkey
at start, поэтому вы можете установитьkey = None
передwhile True