当前位置: 首页 > 面试题库 >

删除文件中的最后一个字符

崔绍辉
2023-03-14
问题内容

在互联网上浏览后,我来了。

假设我已经制作了一个文本文件,内容为: Hello World

好吧,我想d从此文本文件中删除最后一个字符(在本例中为)。

因此,现在文本文件应如下所示: Hello Worl

但是我不知道该怎么做。

我所需要的或多或少是对HDD上文本文件的单个退格功能。

这需要在Linux上工作,因为这就是我正在使用的。


问题答案:

用于fileobject.seek()从末尾寻找1个位置,然后用于file.truncate()删除文件的其余部分:

import os

with open(filename, 'rb+') as filehandle:
    filehandle.seek(-1, os.SEEK_END)
    filehandle.truncate()

这对于单字节编码工作正常。如果您使用多字节编码(例如UTF-16或UTF-32),则需要从头开始查找足够的字节以说明单个代码点。

对于可变字节编码,如果您完全可以使用此技术,则取决于编解码器。对于UTF-8,您需要找到第一个字节(从结尾开始)bytevalue & 0xC0 != 0x80为true,然后从该点开始截断。这样可以确保您不会在多字节UTF-8代码点的中间截断:

with open(filename, 'rb+') as filehandle:
    # move to end, then scan forward until a non-continuation byte is found
    filehandle.seek(-1, os.SEEK_END)
    while filehandle.read(1) & 0xC0 == 0x80:
        # we just read 1 byte, which moved the file position forward,
        # skip back 2 bytes to move to the byte before the current.
        filehandle.seek(-2, os.SEEK_CUR)

    # last read byte is our truncation point, move back to it.
    filehandle.seek(-1, os.SEEK_CUR)
    filehandle.truncate()

请注意,UTF-8是ASCII的超集,因此以上内容也适用于ASCII编码的文件。



 类似资料:
  • 问题内容: 说我有一些任意的多行文本文件: 如何在不使文本文件无效的情况下仅删除文件的最后一个字符(e,而不是换行符或null)? 问题答案: 一个更简单的方法( 输出到stdout ,不更新输入文件): 是仅与最后一个输入行匹配的Sed地址,因此导致仅在最后一行执行以下函数调用()。 用空字符串替换(在本例中为 last )行的 最后 一个字符;即,有效地删除最后一个字符。(在换行符之前)。 匹

  • 如果字符计数超过200,我正在尝试删除UIText字段中的最后一个字符。但它没有效果:

  • 问题内容: 当您必须遍历一个集合并用分隔符分隔每个数据的字符串时,总是总是在末尾有一个额外的分隔符,例如 给出类似以下内容: serverId_1,serverId_2,serverId_3, 我想删除StringBuilder中的最后一个字符(不进行转换,因为在此循环之后我仍然需要它)。 问题答案: 其他人指出了该方法,但这是另一种替代方法: 或者,使用Guava中的类:) 从Java 8开始,

  • 问题内容: 我打算使用Java擦除文本文件中的最后一行;但是,下面的代码将删除所有内容。 问题答案: 如果要从文件中删除最后一行而不创建新文件,则可以执行以下操作: 从倒数第二个字节开始,查找换行符,然后继续向后搜索,直到找到一个。然后在该换行符之后截断该文件。 如果最后一个字符是换行符(即最后一行的末尾),则从第二个最后一个字节而不是最后一个字节开始。

  • 问题内容: 从字符串中删除最后一个字符的最快方法是什么? 我有一个像 我想删除最后一个’,’并取回剩下的字符串: 最快的方法是什么? 问题答案: 首先,我尝试没有空格,并得到一个错误结果。 然后,我添加一个空格并获得良好的结果:

  • 本文向大家介绍从PHP中的文件中删除最后一行,包括了从PHP中的文件中删除最后一行的使用技巧和注意事项,需要的朋友参考一下 从文件中删除最后一行是一个简单的过程,只需几行代码即可完成。 此脚本中方法的局限性在于,如果文件很大,则将整个文件传递到数组中将占用大量内存,从而有可能导致服务器崩溃。最好的方法不是执行此操作,而是从文件末尾开始直到找到第一个换行符为止。以下脚本将一次咬掉50个字符,直到找到