【问题标题】:Delete the last character in text file删除文本文件中的最后一个字符
【发布时间】:2021-11-06 20:44:02
【问题描述】:

我是 python 新手,我正在尝试模仿键盘记录器。我想当我按退格键时,它会删除文本文件中的最后一个字符,比如键入“helli”,字母“i”是错误的,我按退格键,“i”字母被删除。有人有想法吗?

from pynput.keyboard import Listener

def anonymous(key):
    key = str(key)
    key = key.replace("'","")
    if key == "Key.esc":
        raise SystemExit(0)
    if key == "Key.ctrl_l":
        key = "ctrl"
    if key == "Key.enter":
        key = "\n"
    if key == "Key.caps_lock":
        key = "capslock"
    if key == "Key.tab":
        key = "\n"
    if key == "Key.ctrl_r":
        key = "ctrl"
    if key == "Key.space":
        key = " "
    if key == "Key.backspace"
#this line

    with open("log.txt", "a") as file:
        file.write(key)
    print(key)

with Listener(on_press=anonymous) as listener:
    listener.join()

【问题讨论】:

标签: python-3.x character keylogger


【解决方案1】:

我无法专门针对 python 回答。

基本上,一旦你将一个字符写入文件,它就消失了。

  • 您可以在相同的偏移处写入不同的字符(寻找正确的位置)并写入用户键入的下一个字符,
  • 或者您可以记录退格字符,然后重播?
  • 或者您可以回溯并记录一个读者知道会忽略的虚拟字符 - 尽管这与记录退格没有优势,尤其是当您的虚拟字符是长 utf8 序列时。
  • 只有在按下回车后才记录整行和所有更正?

通常第一个或最后一个选项就足够了。用户通常必须按回车来完成一个命令,所以回车会覆盖 1 个垃圾字符。如果您正在做一些输入不无处不在的事情,那么您确定退格实际上意味着擦除吗?想象一下有人使用箭头键滚动网页然后按退格键返回页面?

说到utf8,你确定你知道“最后一个字符”是什么意思吗?

在 linux 中还有一个 truncate() 方法可以用来调整文件的大小。然而,大多数语言并没有在语言级别公开这一点,并且让低级文件描述符方法与高级软缓冲文件很好地配合可能很复杂。如果仍有一些字符未被覆盖,则可以在代码末尾使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2012-01-11
    • 2013-10-07
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多