[英]How do I remove a random new line in the middle of a line in a text file using Python?
[英]How do I append a string to a line in the middle of a file using python?
我希望能够打开一个文件,找到一个特定的字符串,然后将一个字符串附加到该特定的行。
到目前为止,我有:
import errno
import glob
path = '/path/to/key_files/*.txt'
SubjectName = 'predetermined'
files = glob.glob(path)
for filename in files:
try:
with open(filename, 'r+') as f:
for line in f:
if SubjectName in line:
print(line)
except IOError as exc:
if exc.errno != errno.EISDIR:
raise
它从包含我指定的字符串的文本文件中打印一行,因此我知道所有代码都可以在查找正确的行方面进行工作。 现在,我想将字符串',-processed \\ n'添加到定位行的末尾,而不是将其附加到文件的末尾。 有没有办法做到这一点?
您可以使用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
是的,有一种方法可以做到这一点。 找到文件后,将其关闭。 然后再次打开它并创建一个新的文本文件。 逐行读取输入文件,并将每一行写入输出文件。 当到达包含指定字符串的行时,将其复制到输出文件时,将所需的添加文本追加到该行。 然后将其余的输入文件复制到输出文件。 您可能需要继续检查每一行-您指定的文本可能在多行中。
请注意,您不能仅追加到文件中间。 编码后的字符位于文件中的特定位置,它们不会只是略微移动以在中间添加更多字符。 您几乎肯定需要制作一个新文件。 当然,完成后,您可以删除输入文件并重命名输出文件。
避免输出文件的唯一方法是,如果目标行的末尾有“空白”,则可以覆盖新文本。 除非事先计划,否则这不太可能是真的。 如果有计划,则可以打开输入文件进行写入,找到合适的位置,然后编写新文本,该新文本将覆盖该位置上的所有旧文本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.