我正在尝试编写python脚本,以便在文件中找到一个超过1000行的字符串,并在该字符串匹配后删除几行(10)
在fastfile(1000多行)下面,我想搜索字符串“Validate repo test2”,并删除从“Validate repo test2”开始到字符串“end”的行 并将内容重写到新文件中 快速文件 描述“验证回购测试1”我正在尝试编写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 皮棉来源
车道:验证\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()”即可。