Python:如何提取updated_string中指定name后的首个final前数据块
提取指定修改后数据块的解决方案
问题背景
我有一个由多个数据块组成的大文件,数据块格式示例如下:
name1 1234567 comment property1 = 1234567.98765 property2 = 1234567.98765 property3 = 1234567.98765 final name2 1234568 comment property1 = 987654.321 property2 = 9876543.0 property3 = 1234567.98765 final ...
问题:我编写了修改单个数据块的代码,执行后得到的updated_string包含文件中所有数据块(包括修改后的目标块及未修改的其他块)。
目标:仅提取updated_string中修改后的目标数据块存入外部文件,其余数据块保持不变。
目前我已能删除updated_string中目标数据块之前的内容,定位第二个块的代码示例:
mystring = "name2" begin = string.find(mystring) target_start = string[begin:]
但无法删除目标数据块末尾“final”之后的内容。尝试用以下代码定位“final”时,无法精准找到指定name(如name2)之后的首个“final”:
mystring2 = "final" stop = string.find(mystring2) string[stop:]
解决方案
核心逻辑:先定位目标name的起始位置,从该位置开始往后查找首个“final”的位置,最后截取两个位置之间的完整数据块。
基础实现代码(Python)
# 假设updated_string是包含所有数据块的字符串 target_name = "name2" # 1. 定位目标name的起始索引 name_start = updated_string.find(target_name) if name_start == -1: print("目标数据块不存在") else: # 2. 从目标name的位置开始,查找第一个"final"的起始索引 final_start = updated_string.find("final", name_start) # 3. 截取完整的目标数据块(包含"final") target_block = updated_string[name_start : final_start + len("final")] # 将提取到的修改后数据块写入外部文件 with open("modified_target_block.txt", "w") as f: f.write(target_block)
适配换行/空行的优化版
如果数据块的“final”是单独一行,且后续有换行或空行需要保留,可以调整截取逻辑确保完整提取:
target_name = "name2" name_start = updated_string.find(target_name) if name_start == -1: print("目标数据块不存在") else: final_start = updated_string.find("final", name_start) # 找到"final"行的末尾换行符 final_end = updated_string.find("\n", final_start) if final_end == -1: # 若"final"是文件最后一行,直接取到字符串末尾 target_block = updated_string[name_start:] else: # 取到"final"行的完整内容 target_block = updated_string[name_start : final_end + 1] with open("modified_target_block.txt", "w") as f: f.write(target_block)
内容的提问来源于stack exchange,提问作者Ant
相关产品推荐
相关产品推荐

