大文件中的字符串插入

时间:2011-06-19 20:32:24

标签: python file

我有大文件(几GB)和文字。

例如,它有下一个文本:

Hello, World!

我需要在5个位置插入“funny”字样,并抵消剩下的文字:

Hello, funny World!

我怎么能不读取所有文件以抵消休息?或者我如何优化此操作?

感谢。

3 个答案:

答案 0 :(得分:8)

你做不到。纯文本文件不能在文件的开头或中间缩小或展开,而只能在结尾处缩小或扩展。

答案 1 :(得分:1)

嗯,你不能,请看更多信息 How do I modify a text file in Python?

答案 2 :(得分:0)

如果你的文件是几千兆字节,那么我的解决方案可能只适用于64位操作系统:

from __future__ import with_statement

import mmap, os

def insert_string(fp, offset, some_bytes):
    # fp is assumedly open for read and write
    fp.seek(0, os.SEEK_END)
    # now append len(some_bytes) dummy bytes
    fp.write(some_bytes) # some_bytes happens to have the right len :)
    fp.flush()
    file_length= fp.tell()

    mm= mmap.mmap(fp.fileno(), file_length)
    # how many bytes do we have to shift?
    bytes_to_shift= file_length - offset - len(some_bytes)
    # now shift them
    mm.move(offset + len(some_bytes), offset, bytes_to_shift)
    # and replace the contents at offset
    mm[offset:offset+len(some_bytes)]= some_bytes
    mm.close()

if __name__ == "__main__":
    # create the sample file
    with open("test.txt", "w") as fp:
        fp.write("Hello, World!")
    # now operate on it
    with open("test.txt", "r+b") as fp:
        insert_string(fp, 6, " funny")

注意:这是Linux上的Python 2程序。 YMMV。