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

在Python中修改大型文本文件的最后一行的最有效方法

黄俊智
2023-03-14
问题内容

我需要从超过2GB的文件中更新最后一行,这些文件由无法读取的文本行组成readlines()。目前,它可以通过逐行循环工作。但是,我想知道是否有任何编译的库可以更有效地实现这一目标?谢谢!

目前的方法

    myfile = open("large.XML")
    for line in myfile:
        do_something()

问题答案:

更新:使用ShadowRanger的答案。它更短且更健壮。

对于后代:

读取文件的最后N个字节,然后向后搜索换行符。

#!/usr/bin/env python

with open("test.txt", "wb") as testfile:
    testfile.write('\n'.join(["one", "two", "three"]) + '\n')

with open("test.txt", "r+b") as myfile:
    # Read the last 1kiB of the file
    # we could make this be dynamic, but chances are there's
    # a number like 1kiB that'll work 100% of the time for you
    myfile.seek(0,2)
    filesize = myfile.tell()
    blocksize = min(1024, filesize)
    myfile.seek(-blocksize, 2)
    # search backwards for a newline (excluding very last byte
    # in case the file ends with a newline)
    index = myfile.read().rindex('\n', 0, blocksize - 1)
    # seek to the character just after the newline
    myfile.seek(index + 1 - blocksize, 2)
    # read in the last line of the file
    lastline = myfile.read()
    # modify last_line
    lastline = "Brand New Line!\n"
    # seek back to the start of the last line
    myfile.seek(index + 1 - blocksize, 2)
    # write out new version of the last line
    myfile.write(lastline)
    myfile.truncate()


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

  • 问题内容: 我正在尝试使用node.js检索服务器上文件的最后修改日期。 我试过了 和 两者都以未定义形式返回。 问题答案: 对于节点v 4.0.0及更高版本: 或同步:

  • 问题内容: 我尝试寻找其他答案,但仍不确定正确的方法。我有许多个非常大的.csv文件(每个文件可以是一个千兆字节),我想首先获取它们的列标签,因为它们并不完全相同,然后根据用户的喜好使用某些条件提取其中的一些列。在开始提取部分之前,我做了一个简单的测试,以了解解析此文件的最快方法,这是我的代码: 我的结果是: 因此,似乎大多数人使用的csv库确实比其他人慢很多。也许以后证明当我开始从csv文件中提

  • 问题内容: 我有一个包含大量记录(> 300,000)的表。表格中最相关的字段是: CREATE_DATE MOD_DATE 每次添加或更新记录时,这些记录都会更新。 现在,我需要查询该表以查找上次修改的记录的日期。我目前正在使用 但是我想知道这是否是获得答案的最有效方法。 我尝试添加一个来将日期限制为上个月,但实际上看起来比较慢(并且我需要最新的日期,该日期可能早于上个月)。 我还尝试了我在其他

  • 问题内容: 我正在使用JSch从SFTP服务器获取文件,但是我试图找出一种方法来仅获取最旧的文件,并确保当前未将其写入。我想象自己这样做的方式是,首先找到指定远程文件夹中哪个文件最旧。然后,我将检查文件大小,等待x秒(大约10秒,为了安全起见),然后再次检查。如果文件大小没有更改,我将下载文件并进行处理。但是,我不知道该怎么做!如果有人知道如何执行此操作,或者知道其他支持具有此内置SFTP的功能(

  • 我正在大文本文件中搜索匹配项,但我发现它太慢了。这是文件结构: 我正在尝试匹配第一列的文本,我想提取第二列的值。列之间用\t隔开,大约有1000万行。用不同的单词多次搜索文件。什么搜索方法的时间效率最好? 编辑:文件大小为129 Mb,将被搜索至少数千次。EDIT2:文件是按字母顺序排序的,只有当单词有不同的大写字母时,它们才能出现多次。例如:单词都是不同的条目。