Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:大文件中的文本替换_Python - Fatal编程技术网

Python:大文件中的文本替换

Python:大文件中的文本替换,python,Python,我试图在文本文件中非常特定的位置插入文本。此文本文件可能相当大(>>10GB) 我目前正在使用的阅读方法: with open("my_text_file.txt") as f: while True: result = f.read(set_number_of_bytes) x = process_result(result) if x: replace_some_characters_that_i_just_read_and write_it

我试图在文本文件中非常特定的位置插入文本。此文本文件可能相当大(>>10GB)

我目前正在使用的阅读方法:

with open("my_text_file.txt") as f:
   while True:
     result = f.read(set_number_of_bytes)
     x = process_result(result)
     if x:
       replace_some_characters_that_i_just_read_and write_it_back_to_same_file
但是,我不确定如何实施

replace_some_characters_that_i_just_read_and write_it_back_to_same_file
是否有一些方法可以用来确定我在当前文件中读取到的位置,我可以使用这些方法写入文件

就性能而言,如果我使用上述方法在特定位置写入原始文件,那么在写入之前必须找到写入位置是否会有效率问题

或者,您是否建议在上面的每个循环中创建一个完全不同的文件并附加到该文件。然后在该操作完成后删除原始文件?假设空间不是一个大问题,但性能是。

使用,它在替换数据时正确处理文件,并设置
inplace
标志:

import sys
import fileinput

for line in fileinput.input('my_text_file.txt', inplace=True):
    x = process_result(line)
    if x:
        line = line.replace('something', x)

    sys.stdout.write(line)
当您使用
inplace
标志时,原始文件将被移动到备份,您写入
sys.stdout
的任何内容都将写入原始文件名(因此,作为新文件)。确保包括所有行,无论是否更改

当替换数据的字节数与要替换的部件的字节数不完全相同时,您必须重写完整的文件。

使用替换数据时正确处理文件的,并设置
inplace
标志:

import sys
import fileinput

for line in fileinput.input('my_text_file.txt', inplace=True):
    x = process_result(line)
    if x:
        line = line.replace('something', x)

    sys.stdout.write(line)
当您使用
inplace
标志时,原始文件将被移动到备份,您写入
sys.stdout
的任何内容都将写入原始文件名(因此,作为新文件)。确保包括所有行,无论是否更改


如果替换数据的字节数与替换的部分不完全相同,则必须重写整个文件。

替换的文本是否与原始文本的长度完全相同?如果不是,那么你就别无选择,需要创建一个新文件。不是所有的文本都与原始文本相同。fileinput模块是否在每次写入时(循环的每次迭代)在内部创建新文件?(以下提及)@user1431282:在我的回答中扩展;文件被移到一边,您编写了一个完整的新文件,原始数据会根据需要进行更改。您替换的文本是否与原始文本的长度完全相同?如果不是,那么你就别无选择,需要创建一个新文件。不是所有的文本都与原始文本相同。fileinput模块是否在每次写入时(循环的每次迭代)在内部创建新文件?(以下提及)@user1431282:在我的回答中扩展;文件被移到一边,您可以编写一个完整的新文件,并根据需要修改原始数据。