簡體   English   中英

如何在特定行或位置編輯文本文件

[英]How to edit a text file at a specific line or location

我有一個以下格式的文本文件,我正在嘗試編輯/更新文件中的文本。

VAR_GROUP
Var1 : DATATYPE1;(說明 Var1)
變量 2:數據類型 2; (此處添加文字)
Var3 : DATATYPE3;(描述 Var3)
變量 4:數據類型 4; (此處添加文字)
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;(描述 Var)
變量 2:數據類型 2;
Var3 : DATATYPE3;(描述 Var3)
變量 4:數據類型 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"\1 {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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM