Файл синтаксического анализа с повторяющимся блоком текста и добавлением элемента, если его нет

  • фрукты: это из германии, нидерландов, франции

    яблоко: спелые фрукты

    апельсин: витамин с

    банан: витамин d

  • фрукты : это из польши, австрии

    апельсин: витамин c

    ананас: витамин, помогает пищеварению: используется в течение 2 дней

    виноград: витамин B

  • фрукты: это из польши, австрии

    груша: витамин c

    яблоко: спелые фрукты, витамины a, b, c

      - белое яблоко: {используется для повышения иммунитета}
    

    папиа: витамин

  • фрукты: это из сладкого, норвегия

    апельсин: витамин с

    ананас: витамин

    виноград: витамин B


Требование:

Это большой файл с более чем 1000 строк. Мне нужно добавить элемент яблоко в контейнер фруктов , только если его нет , без изменения структуры макета файла или расположения существующих элементов.

Если что-то не понятно, пожалуйста, напишите мне ... заранее спасибо за вашу поддержку!

-3
задан 10 August 2020 в 15:07

1 ответ

Поскольку у вас большой файл, мы будем обрабатывать каждый контейнер индивидуально, а не загружать весь файл в память. Мы легко можем сделать это на Python3. Сохраните его в process.py и данные в fruit_file.txt

import sys

# This function checks if "apple" not in container then append it.
def add_apple_and_print(header, container):
    if container is not None:
        if not any(fruit.startswith("apple") for fruit in container):
            container.append('apple: ripe fruit, vitamin a, b, c')

        print("\n"+header+"\n")
        print("\n\n".join(container))

# Open the file for reading
with open(sys.argv[1]) as f:
    header = None                         # Initialize header with None
    container = None                      # Initialize the container with None
    for line in f:                        # Read line by line
        line = line.strip()               # Remove trailing spaces
        if len(line) > 0:
            if "fruits :" in line:        # if line contains "fruits :"
                add_apple_and_print(header, container) # Print privious container
                header = line                          # Set header
                container = []                         # Create a new container for current fruit section
            else:
                container.append(line)                 # Add fruits to container

    add_apple_and_print(header, container)            # Print last container

затем

python3 process.py fruits_file.txt > fruits_file_with_apple.txt

Edit : В более раннем скрипте «яблоко» соответствовало «ананасу». Таким образом, не добавлялось в такие контейнеры. Изменен скрипт.

Подсказки из ответа СвенМарнаха на stackoverflow.com

1
ответ дан 11 August 2020 в 20:11

Другие вопросы по тегам:

Похожие вопросы: