我有一個以下格式的文本檔案,我正在嘗試編輯/更新檔案中的文本。
VAR_GROUP
Var1 : DATATYPE1 ;(描述 Var1)
Var2 : DATATYPE2; (此處添加文字)
Var3 : DATATYPE3;(Description 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 ;(Description Var)
Var2 : DATATYPE2;
Var3 : DATATYPE3;(描述 Var3)
Var4 : DATATYPE4;
END_GROUP
Var1 : DATATYPE1 ;(Description Var1)
Var2 :
DATATYPE2 ;(Description Var2) Var3 : DATATYPE3;(Description Var3)
Var4 : DATATYPE4;(Description Var4)
提到的特定位置沒有被編輯,而是在最后添加的可能原因是什么。提前致謝。
uj5u.com熱心網友回復:
您已在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()另一個答案中提到的方法一次只獲取一行,對其進行編輯并寫回。不過,您仍然需要謹慎使用該模式。
uj5u.com熱心網友回復:
使用 python seek() 函式。使用此功能,您可以逐個字符地更改檔案中的游標位置。此外,在您的函式中將模式更改為 a ,就像在 r 模式下一樣,您只能讀取檔案。在 w 模式下,檔案將被覆寫。
在這個網站上閱讀更多關于它的資訊:https : //www.w3schools.com/python/ref_file_seek.asp
uj5u.com熱心網友回復:
我會使用正則運算式來匹配和替換檔案中的文本
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/315082.html
上一篇:將Pytest作為子行程呼叫
