解析带有重复文本框的文件,并在不存在元素时添加元素

解析带有重复文本框的文件,并在不存在元素时添加元素
  • 水果:来自德国、荷兰、法国

    苹果:成熟的果实

    橙子:维生素C

    香蕉:维生素 D

  • 水果:来自波兰、奥地利

    橙子:维生素C

    菠萝:维生素,帮助消化:使用了2天

    葡萄:维生素B

  • 水果:来自波兰、奥地利

    梨:维生素C

    苹果:成熟果实,维生素 a、b、c

         - white apple: {This is used for immunity boost}
    

    木瓜:一种维生素

  • 水果:来自瑞典、挪威

    橙子:维生素C

    菠萝:一种维生素

    葡萄:维生素B


要求:

这是一个超过 1000 行的大文件。我需要apple在水果容器中添加元素仅当不存在时,而不会改变文件布局结构或现有元素的位置。

如果有什么不清楚的地方,请给我留言...提前感谢您的支持!

答案1

由于文件很大,我们将单独处理每个容器,而不是将整个文件加载到内存中。我们可以在 Python3 中轻松完成此操作。将其保存在,process.py并将数据保存在fruits_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

编辑:在之前的脚本中,“apple”与“pineapple”匹配。因此无法添加到此类容器中。已修改脚本。

从 SvenMarnach 的回答中得到提示stackoverflow.com

相关内容