我正在尝试编写python脚本,以便在文件中找到一个超过1000行的字符串,并在该字符串匹配后删除几行(10)

我正在尝试编写python脚本,以便在文件中找到一个超过1000行的字符串,并在该字符串匹配后删除几行(10),python,python-3.x,Python,Python 3.x,在fastfile(1000多行)下面,我想搜索字符串“Validate repo test2”,并删除从“Validate repo test2”开始到字符串“end”的行 并将内容重写到新文件中 快速文件 描述“验证回购测试1” 车道:验证\u回购do 皮棉来源 执行_测试 验证\u文档 确保工具名称格式化 确保\u代码\u样本 确保\u特殊\u文件\u代码\u样本 确保\u代码\u片段 确保\u操作\u配置\u项目\u格式设置 结束 描述“验证回购测试2” 车道:验证\u回购do 皮棉来源

在fastfile(1000多行)下面,我想搜索字符串“Validate repo test2”,并删除从“Validate repo test2”开始到字符串“end”的行 并将内容重写到新文件中

快速文件 描述“验证回购测试1”
车道:验证\u回购do
皮棉来源
执行_测试
验证\u文档
确保工具名称格式化
确保\u代码\u样本
确保\u特殊\u文件\u代码\u样本
确保\u代码\u片段
确保\u操作\u配置\u项目\u格式设置
结束

描述“验证回购测试2”
车道:验证\u回购do
皮棉来源
执行_测试
验证\u文档
确保工具名称格式化
确保\u代码\u样本
确保\u特殊\u文件\u代码\u样本
确保\u代码\u片段
确保\u操作\u配置\u项目\u格式设置
结束

描述“验证回购测试3”
车道:验证\u回购do
皮棉来源
执行_测试
验证\u文档
确保工具名称格式化
确保\u代码\u样本
确保\u特殊\u文件\u代码\u样本
确保\u代码\u片段
确保\u操作\u配置\u项目\u格式设置

结束

您可以这样做:

with open('Fastfile', 'r') as f_orig, open('Fastfile_new', 'w') as f_new:
    skipping = False
    for line in f_orig:
        if 'Validate repo test2' in line:
            skipping = True
        if not skipping:
            f_new.write(line)
        if line[:3] == 'end':
            skipping = False
import re

fileText = file.read()
regex = re.compile(r"\"Validate repo test[\d]*\"", re.DOTALL)
result = re.sub(regex, "", fileText)

file.write(result)

也许有很多解决方案,但我认为下面的代码也可以解决您的问题

need_delete = False
with open(path_to_old_file, 'r') as fin, open(path_to_new_file, 'w+') as fout :
    for line in fin:
        if line.endswith('"Validate repo test2"\n'):
            need_delete = True
        if need_delete and not line.strip():
            need_delete = False
            continue
        if not need_delete:
            fout.write(line)

我希望这会对您有所帮助。

我是新手,所以我不确定如何信任作者,但这对我很有用: 谢谢@zx81

您可以使用正则表达式:

(?s)(?<="Validate repo test[\d]*").*(?=end)

@谢谢你!这一行的作用是什么“第[:3]行”exactly@rag4260
行[:3]
是一个切片索引,表示行的前三个字符。因此,将检查每一行的前三个字符是否为“end”。在本页上搜索“slice”以了解更多详细信息:我在删除字符串“end”之前的行后获得一行额外的行…我们如何删除该行?当然,正则表达式是一个很好的学习工具:)超级有用我在删除字符串“end”之前的行后获得一行空行…我们如何删除该行。。我厌倦了在if块中使用readline(),我们在其中检查字符串“end”,但它不起作用,所以您希望删除到空行。将“line=='end\n'”替换为“not line.strip()”即可。