Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python将字符串附加到文件中间的行中?_Python_String_Append_Text Files_Line - Fatal编程技术网

如何使用Python将字符串附加到文件中间的行中?

如何使用Python将字符串附加到文件中间的行中?,python,string,append,text-files,line,Python,String,Append,Text Files,Line,我希望能够打开一个文件,找到一个特定的字符串,然后将一个字符串附加到该特定行 到目前为止,我已经: 导入错误号 导入glob path='/path/to/key_files/*.txt' SubjectName='预定' files=glob.glob(路径) 对于文件中的文件名: 尝试: 将open(文件名为“r+”)作为f: 对于f中的行: 如果第行中有SubjectName: 打印(行) 除IOError作为exc外: 如果exc.errno!=errno.EISDIR: 提升 它从包

我希望能够打开一个文件,找到一个特定的字符串,然后将一个字符串附加到该特定行

到目前为止,我已经:

导入错误号
导入glob
path='/path/to/key_files/*.txt'
SubjectName='预定'
files=glob.glob(路径)
对于文件中的文件名:
尝试:
将open(文件名为“r+”)作为f:
对于f中的行:
如果第行中有SubjectName:
打印(行)
除IOError作为exc外:
如果exc.errno!=errno.EISDIR:
提升

它从包含我指定的字符串的文本文件中打印一行,因此我知道所有代码都可以定位正确的行。现在,我想将字符串“,--processed\n”添加到定位行的末尾,而不是将其附加到文件的最末尾。有办法做到这一点吗?

是的,有办法做到这一点。找到文件后,请将其关闭。然后再次打开它并创建一个新的文本文件。逐行读取输入文件,并将每一行写入输出文件。当到达包含指定字符串的行时,在将所需添加的文本复制到输出文件时,将其附加到该行。然后将输入文件的其余部分复制到输出文件。您可能希望继续检查每一行——您指定的文本可能在多行中

请注意,您不能仅将其附加到文件的中间。编码字符SIT是文件中的特定位置,它们不会稍微移动,在中间添加更多字符。您几乎肯定需要创建一个新文件。当然,完成后,可以删除输入文件并重命名输出文件


避免输出文件的唯一方法是在目标行的末尾有“空白”,可以覆盖新文本。除非事先计划好,否则这不太可能是真的。如果是计划好的,您可以打开输入文件进行写入,找到合适的位置,然后写入新文本,这将覆盖该位置的任何旧文本。

是的,有一种方法可以做到这一点。找到文件后,请将其关闭。然后再次打开它并创建一个新的文本文件。逐行读取输入文件,并将每一行写入输出文件。当到达包含指定字符串的行时,在将所需添加的文本复制到输出文件时,将其附加到该行。然后将输入文件的其余部分复制到输出文件。您可能希望继续检查每一行——您指定的文本可能在多行中

请注意,您不能仅将其附加到文件的中间。编码字符SIT是文件中的特定位置,它们不会稍微移动,在中间添加更多字符。您几乎肯定需要创建一个新文件。当然,完成后,可以删除输入文件并重命名输出文件


避免输出文件的唯一方法是在目标行的末尾有“空白”,可以覆盖新文本。除非事先计划好,否则这不太可能是真的。如果是计划好的,您可以打开输入文件进行写入,找到合适的位置,然后写入新文本,这将覆盖该位置的任何旧文本。

您可以使用
re.sub
。使用
f.read()
读取文件后,您可以使用see
f.seek(0)
倒带到开头,并使用
f.write()
写入新内容(您需要使用
r+
标志打开文件):

文件.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)
运行
文件.txt后,包含:

Line1
Line2
Line3,--processed
Line4

您可以使用
re.sub
。使用
f.read()
读取文件后,您可以使用see
f.seek(0)
倒带到开头,并使用
f.write()
写入新内容(您需要使用
r+
标志打开文件):

文件.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)
运行
文件.txt后,包含:

Line1
Line2
Line3,--processed
Line4

可能是@tgikal的重复,但我不想插入新行,我想添加到现有行。这可能是相同的解决方案,但对我来说似乎有点不同!插入或追加只是修改文件数据中特定位置的数据,这是相同的操作。在所选答案中,而不是
contents.insert(index,value)
您将使用
contents[index]=contents[index].strip('\n'+'),--processed\n'
代替。可能重复的,可能是这个:@tgikal类型的重复,但我不想插入新行,我想添加到现有行。这可能是相同的解决方案,但对我来说似乎有点不同!插入或追加只是修改文件数据中特定位置的数据,这是相同的操作。在所选答案中,而不是
contents.insert(index,value)
您将使用
contents[index]=contents[index].strip(“\n')+”,--processed\n'
。可能是重复的,也可能是这个:很有效,谢谢!你介意再解释一下你为new_s做了些什么吗?@LouiseCullen我用正则表达式用新字符串替换旧字符串-在本例中,
Line3
Line3--已处理
。关键是将标志设置为
re.MULTILINE
,以使
^
$
符号适用于每一行。这很有效,谢谢你!你介意再解释一下你为new_s做了些什么吗?@LouiseCullen我用正则表达式用新字符串替换旧字符串-在本例中,
Line3
Line3--已处理
。关键是将标志设置为
re.MULTILINE
,以使
^
$
符号适用于每一行。