我希望能够打开一个文件,找到一个特定的字符串,然后将一个字符串附加到该特定的行上。
到目前为止,我有:
home.js
从文本文件中打印出包含我指定的字符串的行,因此我知道所有代码都可以正确定位行。现在,我想将字符串',-processed \ n'添加到定位行的末尾,而不是将其附加到文件的末尾。有办法吗?
答案 0 :(得分:2)
您可以使用re.sub
。使用f.read()
读取文件后,可以使用see f.seek(0)
快退到开头并使用f.write()
来编写新内容(您需要使用r+
标志打开文件):
file.txt
的内容:
Line1
Line2
Line3
Line4
脚本:
import re
SubjectName = 'Line3'
with open('file.txt', 'r+') as f:
s = f.read()
new_s = re.sub(r'^(.*{}.*)$'.format(re.escape(SubjectName)), lambda g: g.group(0) + ',--processed', s, flags=re.MULTILINE)
f.seek(0)
f.write(new_s)
运行file.txt
后包含:
Line1
Line2
Line3,--processed
Line4
答案 1 :(得分:0)
是的,有一种方法可以做到这一点。找到文件后,将其关闭。然后再次打开它并创建一个新的文本文件。逐行读取输入文件,并将每一行写入输出文件。当到达包含指定字符串的行时,将其复制到输出文件时,将所需的添加文本追加到该行。然后将其余的输入文件复制到输出文件。您可能需要继续检查每一行-您指定的文本可能在多行中。
请注意,您不能仅追加到文件中间。编码后的字符位于文件中的特定位置,它们不会只是略微移动以在中间添加更多字符。您几乎肯定需要制作一个新文件。当然,完成后,您可以删除输入文件并重命名输出文件。
避免输出文件的唯一方法是,如果目标行的末尾有“空白”,则可以覆盖新文本。除非事先计划,否则这不太可能是真的。如果有计划,则可以打开输入文件进行写入,找到合适的位置,然后编写新文本,这将覆盖该位置的所有旧文本。