我正在尝试编写python脚本来查找超过1000行的文件中的字符串,并在该字符串匹配后删除几行(10)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我正在尝试编写python脚本来查找超过1000行的文件中的字符串,并在该字符串匹配后删除几行(10)相关的知识,希望对你有一定的参考价值。
在fastfile下面(超过1000行)我想搜索字符串“Validate repo test2”并删除从“Validate repo test2”开始到字符串“end”的行并将内容重写为新文件。
中fastfile
desc“验证repo test1” lane:validate_repo do lint_source execute_tests validate_docs ensure_tool_name_formatting ensure_code_samples ensure_special_docs_code_samples ensure_code_snippets ensure_actions_config_items_formatting 结束
desc“验证repo test2” lane:validate_repo do lint_source execute_tests validate_docs ensure_tool_name_formatting ensure_code_samples ensure_special_docs_code_samples ensure_code_snippets ensure_actions_config_items_formatting 结束
desc“验证repo test3” lane:validate_repo do lint_source execute_tests validate_docs ensure_tool_name_formatting ensure_code_samples ensure_special_docs_code_samples ensure_code_snippets ensure_actions_config_items_formatting 结束
你可以这样做:
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
我是新手,所以我不确定如何归功于作者,但这对我很有用:Regex Match all characters between two strings谢谢@ zx81
你可以使用正则表达式:
(?s)(?<="Validate repo test[d]*").*(?=end)
http://www.rexegg.com/regex-modifiers.html#dotall第一部分将启用“全点模式”,正则表达式的其余部分说“选择所有字符”“验证回购测试[ d] *”“和”结束“”。从那里你可以使用正则表达式删除所有这些。总之它看起来有点像这样:
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"
'):
need_delete = True
if need_delete and not line.strip():
need_delete = False
continue
if not need_delete:
fout.write(line)
我希望这能帮到您。
以上是关于我正在尝试编写python脚本来查找超过1000行的文件中的字符串,并在该字符串匹配后删除几行(10)的主要内容,如果未能解决你的问题,请参考以下文章