Значение переменной не увеличивается в пределах вложенных циклов (запись в файл с Python) - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть код для анализа нескольких текстовых файлов, извлечения заданной части из каждого и записи их в другой текстовый файл. Я повторяю этот процесс снова и снова, извлекая следующую часть файлов и записывая их в другой текстовый файл.

Я использую переменную cube_i для перехода от одного файла к другому и переменную layer для перемещения из одной части текстовых файлов в другую. Однако созданные мной циклы не go дальше, чем cube_i=0 и layer=0. Любые предложения о том, как я могу перейти к увеличению значения этих переменных?

rgx_start = re.compile(r'Z down')  # Second line before the start of the layer code: "G0Z2 ; Z down"
rgx_end = re.compile(r'Layer #')  # Second line after the end of the layer code: "; Layer #<integer>"
if layer in range(0, (layers_total + 1)):
    final_code.write('; ------------------------------\n')
    label = ';          Layer #{}\n'.format(layer)
    final_code.write(label)
    final_code.write('; ------------------------------\n')
    with open(first_file,'r') as gcode:  # Opening the first file to write the powder drop
        for i, line in enumerate(gcode.readlines()):
            if i in range(powdrop_start, (powdrop_end + 1)):  # Writing the powder drop
                final_code.write(line)
    cube_i = 0 # Reseting the cube_i variable
    if cube_i in range(0, (parts_total + 1)):
        label_cube = ';   PART #{}\n'.format(cube_i)
        final_code.write(label_cube)
        # Opening each text file separately
        with open(f_path, 'r') as gcode:  # f_path contains cube_i
            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
        for i, line in enumerate(lines[layer_start:layer_end + 1]):
            final_code.write(line)
        prev_start.append(layer_start)
        prev_end.append(layer_end)
        cube_i = + 1
    if layer == 0: # Writing the zeroth layer footer
        with open(first_file, 'r') as gcode:
            for i, line in enumerate(gcode.readlines()):
                if i == zeroth_ftr:
                    final_code.write(line)
    layer =+ 1

1 Ответ

0 голосов
/ 20 февраля 2020

В коде есть пара циклов for, которые были неправильно написаны как операторы if. Правильный код будет:

rgx_start = re.compile(r'Z down')  # Second line before the start of the layer code: "G0Z2 ; Z down"
rgx_end = re.compile(r'Layer #')  # Second line after the end of the layer code: "; Layer #<integer>"
for layer in range(0, (layers_total + 1)):
    final_code.write('; ------------------------------\n')
    label = ';          Layer #{}\n'.format(layer)
    final_code.write(label)
    final_code.write('; ------------------------------\n')
    with open(first_file,'r') as gcode:  # Opening the first file to write the powder drop
        for i, line in enumerate(gcode.readlines()):
            if i in range(powdrop_start, (powdrop_end + 1)):  # Writing the powder drop
                final_code.write(line)
    cube_i = 0 # Reseting the cube_i variable
    for cube_i in range(0, (parts_total + 1)):
        label_cube = ';   PART #{}\n'.format(cube_i)
        final_code.write(label_cube)
        # Opening each text file separately
        with open(f_path, 'r') as gcode:  # f_path contains cube_i
            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
        for i, line in enumerate(lines[layer_start:layer_end + 1]):
            final_code.write(line)
        prev_start.append(layer_start)
        prev_end.append(layer_end)
        cube_i = + 1
    if layer == 0: # Writing the zeroth layer footer
        with open(first_file, 'r') as gcode:
            for i, line in enumerate(gcode.readlines()):
                if i == zeroth_ftr:
                    final_code.write(line)
    layer =+ 1

Это должно работать в вашем случае.

...