python - 在使用正则表达式搜索功能在 Python 中解析的多个 if 和 for 语句之后未定义变量
问题描述
我正在用 Python 解析几个文本文件,以便找到一遍又一遍地重复的代码块。目的是将不同文件的相似代码块合并到另一个文件中。
因此,我需要扫描文本文件,通过使用正则表达式搜索找到感兴趣的块,然后将其开始和结束的行存储在原始文本文件中。最后,我可以将该代码块写入另一个文件,使用“开始行和结束行”作为边界。
下面的代码摘录是我描述的这个主要代码的一部分,但变量“layer_end”没有被定义。有什么建议么?
with open(f_path, 'r') as gcode: # Opening each file separately
for i, line in enumerate(gcode.readlines()): # Searching for the beginning of given layer
if rgx_start.search(line):
start_i = prev_start[cube_i]
print(start_i)
if i > start_i:
layer_start = i + 2
break
for i, line in enumerate(gcode.readlines()): # Searching for the end of given layer
if rgx_end.search(line):
if i > layer_start:
layer_end = i - 2
break
for i, line in enumerate(gcode.readlines()):
if i in range(layer_start, (layer_end + 1)): # Writing the code of that given layer
final_code.write(line)
prev_start.append(layer_start)
print(prev_start)
prev_end.append(layer_end)
解决方案
readlines
每个打开的文件只能调用一次。start_i
在 for 循环内永远不会改变,因为内部if
是唯一的,如果 i 大于某个值,你可以从这个元素开始。
with open(f_path, 'r') as gcode: # Opening each file separately
lines = gcode.readlines()
start_i = prev_start[cube_i]
for i, line in enumerate(lines[start_i+1:]): # Searching for the beginning of given layer
if rgx_start.search(line):
layer_start = start_i + i + 3
break
for i, line in enumerate(lines[layer_start+1:]): # Searching for the end of given layer
if rgx_end.search(line):
layer_end = layer_start + i - 1
break
final_code.write(lines[layer_start:layer_end + 1)
prev_start.append(layer_start)
print(prev_start)
prev_end.append(layer_end)