фрукты: это из германии, нидерландов, франции
яблоко: спелые фрукты
апельсин: витамин с
банан: витамин d
фрукты : это из польши, австрии
апельсин: витамин c
ананас: витамин, помогает пищеварению: используется в течение 2 дней
виноград: витамин B
фрукты: это из польши, австрии
груша: витамин c
яблоко: спелые фрукты, витамины a, b, c
- белое яблоко: {используется для повышения иммунитета}
папиа: витамин
фрукты: это из сладкого, норвегия
апельсин: витамин с
ананас: витамин
виноград: витамин B
Это большой файл с более чем 1000 строк. Мне нужно добавить элемент яблоко
в контейнер фруктов , только если его нет , без изменения структуры макета файла или расположения существующих элементов.
Если что-то не понятно, пожалуйста, напишите мне ... заранее спасибо за вашу поддержку!
Поскольку у вас большой файл, мы будем обрабатывать каждый контейнер индивидуально, а не загружать весь файл в память. Мы легко можем сделать это на 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