如何在特定行或位置编辑文本文件
How to edit a text file at a specific line or location
我有一个格式如下的文本文件,我正在尝试 edit/update 文件中的文本。
VAR_GROUP
Var1 : DATATYPE1;(描述 Var1)
Var2 : DATATYPE2;(此处添加文本)
Var3 : DATATYPE3;(描述 Var3)
Var4 : DATATYPE4;(此处添加文本)
END_GROUP
使用 Python 我正在尝试添加某些描述,例如 Var3 和 Var4。使用我编写的代码,逻辑工作正常,但文本被添加到文件末尾而不是所需位置。
def search_write_in_file(file_name, string_to_search, description):
with open(file_name, 'r+') as file_obj:
# Read all lines in the file
for line in file_obj:
# For each line, check if line contains the string
line_number += 1
if (string_to_search in line) and flag_found == 0:
line = line[:-1]+description+'\n'
file_obj.write(line)
flag_found =1
read_obj.close()
当前输出
VAR_GROUP
Var1 : DATATYPE1;(描述变量)
Var2:数据类型 2;
Var3 : DATATYPE3;(描述 Var3)
Var4:数据类型 4;
END_GROUP
Var1 : DATATYPE1;(描述 Var1)
Var2 : DATATYPE2;(描述 Var2)
Var3 : DATATYPE3;(描述 Var3)
Var4:DATATYPE4;(描述 Var4)
提到的具体位置没有编辑,而是添加在最后的可能原因是什么。提前致谢。
使用python seek() 函数。使用它,您可以逐个字符地更改文件中的光标位置。
另外,在您的函数中将模式更改为 a+,因为在 r+ 模式下您只能读取文件。在w+模式下,文件会被覆盖。
在本网站阅读更多相关信息:
https://www.w3schools.com/python/ref_file_seek.asp
您已在 r+
模式下打开文件。
写入文件需要 w+
或 a+
模式。
试试这个:
def search_write_in_file(file_name, string_to_search, description):
lines=[]
with open(file_name, 'r+') as file_obj:
# Read all lines in the file
lines = file_obj.readlines()
# Make the changes
for idx in range(len(lines)):
line = lines[idx]
# For each line, check if line contains the string
if (string_to_search in line) and flag_found == 0:
line = line[:-1]+description+'\n'
lines[idx]=line
flag_found =1
# w+ mode truncates the content and then writes the content back again
with open(file_name, 'w+') as file_obj:
file_obj.writelines(line)
或者,您可以使用另一个答案中提到的 seek()
方法一次准确地获取一行,对其进行编辑并写回。不过还是要注意模式。
我会使用正则表达式来匹配和替换文件中的文本
import re
def search_write_in_file(file_name, string_to_search, description):
with open(file_name, 'r+') as file_obj:
text = file_obj.read()
new_text = re.sub(string_to_search,r" {0}\n".format(description),text)
with open(file_name, 'w') as file_obj:
file_obj.write(new_text)
print(new_text)
if __name__ == '__main__':
search_write_in_file('text_to_edit.txt',r'(DATATYPE2;\n)',"test2")
search_write_in_file('text_to_edit.txt',r'(DATATYPE4;\n)',"test4")
这会将现有文件更新为
VAR_GROUP
Var1 : DATATYPE1;(Description Var)
Var2 : DATATYPE2; test2
Var3 : DATATYPE3;(Description Var3)
Var4 : DATATYPE4; test4
END_GROUP
我有一个格式如下的文本文件,我正在尝试 edit/update 文件中的文本。
VAR_GROUP
Var1 : DATATYPE1;(描述 Var1)
Var2 : DATATYPE2;(此处添加文本)
Var3 : DATATYPE3;(描述 Var3)
Var4 : DATATYPE4;(此处添加文本)
END_GROUP
使用 Python 我正在尝试添加某些描述,例如 Var3 和 Var4。使用我编写的代码,逻辑工作正常,但文本被添加到文件末尾而不是所需位置。
def search_write_in_file(file_name, string_to_search, description):
with open(file_name, 'r+') as file_obj:
# Read all lines in the file
for line in file_obj:
# For each line, check if line contains the string
line_number += 1
if (string_to_search in line) and flag_found == 0:
line = line[:-1]+description+'\n'
file_obj.write(line)
flag_found =1
read_obj.close()
当前输出
VAR_GROUP
Var1 : DATATYPE1;(描述变量)
Var2:数据类型 2;
Var3 : DATATYPE3;(描述 Var3)
Var4:数据类型 4;
END_GROUP
Var1 : DATATYPE1;(描述 Var1)
Var2 : DATATYPE2;(描述 Var2)
Var3 : DATATYPE3;(描述 Var3)
Var4:DATATYPE4;(描述 Var4)
提到的具体位置没有编辑,而是添加在最后的可能原因是什么。提前致谢。
使用python seek() 函数。使用它,您可以逐个字符地更改文件中的光标位置。 另外,在您的函数中将模式更改为 a+,因为在 r+ 模式下您只能读取文件。在w+模式下,文件会被覆盖。
在本网站阅读更多相关信息: https://www.w3schools.com/python/ref_file_seek.asp
您已在 r+
模式下打开文件。
写入文件需要 w+
或 a+
模式。
试试这个:
def search_write_in_file(file_name, string_to_search, description):
lines=[]
with open(file_name, 'r+') as file_obj:
# Read all lines in the file
lines = file_obj.readlines()
# Make the changes
for idx in range(len(lines)):
line = lines[idx]
# For each line, check if line contains the string
if (string_to_search in line) and flag_found == 0:
line = line[:-1]+description+'\n'
lines[idx]=line
flag_found =1
# w+ mode truncates the content and then writes the content back again
with open(file_name, 'w+') as file_obj:
file_obj.writelines(line)
或者,您可以使用另一个答案中提到的 seek()
方法一次准确地获取一行,对其进行编辑并写回。不过还是要注意模式。
我会使用正则表达式来匹配和替换文件中的文本
import re
def search_write_in_file(file_name, string_to_search, description):
with open(file_name, 'r+') as file_obj:
text = file_obj.read()
new_text = re.sub(string_to_search,r" {0}\n".format(description),text)
with open(file_name, 'w') as file_obj:
file_obj.write(new_text)
print(new_text)
if __name__ == '__main__':
search_write_in_file('text_to_edit.txt',r'(DATATYPE2;\n)',"test2")
search_write_in_file('text_to_edit.txt',r'(DATATYPE4;\n)',"test4")
这会将现有文件更新为
VAR_GROUP
Var1 : DATATYPE1;(Description Var)
Var2 : DATATYPE2; test2
Var3 : DATATYPE3;(Description Var3)
Var4 : DATATYPE4; test4
END_GROUP