繁体   English   中英

如何使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM