Увеличение столбца i элемента на значения внутри списка - PullRequest
1 голос
/ 04 марта 2020

У меня есть al oop, который ищет ключевые слова в текстовом файле и вставляет целые числа, следующие за ключевыми словами, в файл excel. Я хочу, чтобы целые числа были в указанных c ячейках в файле Excel. Можно ли увеличить i на значения в i_list, а не всегда на 5, как в примере?

i_list = [5,3,1,1]

def search(file, excel_file):
    i = 2
    found_keywords = list()
    wb = load_workbook(excel_file)
    sheets = wb.sheetnames
    sheet1 = wb[sheets[0]]

    for kwrd in keywords:
        for line in file:
            if kwrd in line and kwrd not in found_keywords:
                found_keywords.append(kwrd)
                sheet1.cell(row=3, column=i).value = int(re.search(r"\d+", line).group())
                i += 5
            elif kwrd in line:
                continue

    wb.save(excel_file)

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Если вам не нужно переключаться между значениями i, то вы можете просто создать генератор, который будет возвращать вам значения i одно за другим. Я обернул вызов следующего значения i в блок try, поскольку, когда вы исчерпали значения, код не будет знать, что делать. поэтому мы ломаем l oop

i_list = (i for i in [5,3,1,1])
i = 2
for _ in range(10):
    print(i)
    try:
        i += next(i_list)
    except StopIteration as si:
        print("no more values in i so loop terminating")
        break

ВЫХОД

2
7
10
11
12
no more values in i so loop terminating

Однако, если вы хотите циклически перебрасывать значения i, вы можете использовать цикл из itertools модуль и безоговорочно возьмите следующий элемент из i_list столько, сколько вам нужно

from itertools import cycle
i_list = cycle([5,3,1,1])
i = 2
for _ in range(10):
    print(i)
    i += next(i_list)

ВЫХОД

2
7
10
11
12
17
20
21
22
27

ОБНОВЛЕНИЕ ВАШЕГО КОДА

ниже - обновление вашего кода, основанное на том факте, что вы сказали, что вам не нужно циклически повторяться. Помните, что как только вы достигнете конца i_list, ваш код не сможет увеличить i, поскольку в i_list больше нет значений.

i_list = [5,3,1,1]
i_generator = (i for i in i_list)

def search(file, excel_file):
    i = 2
    found_keywords = list()
    wb = load_workbook(excel_file)
    sheets = wb.sheetnames
    sheet1 = wb[sheets[0]]

    for kwrd in keywords:
        for line in file:
            if kwrd in line and kwrd not in found_keywords:
                found_keywords.append(kwrd)
                sheet1.cell(row=3, column=i).value = int(re.search(r"\d+", line).group())
                i += next(i_generator)
            elif kwrd in line:
                continue

    wb.save(excel_file)
1 голос
/ 04 марта 2020

Этот фрагмент кода, откорректированный от оригинала, циклически изменяет значения i_list:

i_list = [5,3,1,1]

def search(file, excel_file):
    i = 2
    found_keywords = list()
    wb = load_workbook(excel_file)
    sheets = wb.sheetnames
    sheet1 = wb[sheets[0]]

    for kwrd in keywords:
        for line in file:
            if kwrd in line and kwrd not in found_keywords:
                for i in i_list: # Update i based on the i-list value
                    sheet1.cell(row=3, column=i).value = int(re.search(r"\d+", line).group())
            elif kwrd in line:
                continue
    wb.save(excel_file)
...