-1

我有这个文本

/** 早上好

亚历克斯

房子

红色的

*/

/** 晚安

玛丽亚

办公室

绿色的

*/

我想在一个列表中包含Alex、Dog、House 和 red,在另一个列表中包含Maria,Cat,office,green

我有这个代码

    with open(filename) as f :
        for i in f:
            if i.startswith("/** Goodmorning"):
                #add files to list
            elif i.startswith("/** Goodnight"):

                #add files to other list

那么,有没有什么方法可以编写脚本,以便它可以理解Alex属于具有Goodmorning的文本部分?

4

3 回答 3

2

我建议您使用dict,其中“部分名称”将是一个键:

with open(filename) as f:
    result = {}
    current_list = None
    for line in f:
        if line.startswith("/**"):
            current_list = []
            result[line[3:].strip()] = current_list
        elif line != "*/":
            current_list.append(line.strip())

结果:

{'Goodmorning': ['Alex', 'Dog', 'House', 'Red'], 'Goodnight': ['Maria', 'Cat', 'Office', 'Green']}

要搜索值中的哪个键,您可以使用下一个代码:

search_value = "Alex"
for key, values in result.items():
    if search_value in values:
        print(search_value, "belongs to", key)
        break
于 2019-09-24T07:51:28.800 回答
1

扩展 Olvin Roght(抱歉无法发表评论 - 声誉不足)我会保留第二个字典用于反向查找

with open(filename) as f:
    key_to_list = {}
    name_to_key = {}
    current_list = None
    current_key = None
    for line in f:
        if line.startswith("/**"):
            current_list = []
            current_key = line[3:].strip()
            key_to_list[current_key] = current_list
        elif line != "*/":
            current_name=line.strip()
            name_to_key[current_name]=current_key
            current_list.append(current_name)

print key_to_list
print name_to_key['Alex']

替代方法是之后转换字典:

name_to_key = {n : k for k in key_to_list for n in key_to_list[k]}

(即,如果您想使用 ashwani 的正则表达式版本) 限制是每个名称只允许一个成员资格。

于 2019-09-24T08:24:32.560 回答
1

我建议使用正则表达式。在 python 中有一个名为的模块re

import re

s = """/** Goodmorning

Alex

Dog

House

Red

*/

/** Goodnight

Maria

Cat

Office

Green

*/"""

pattern = r'/\*\*([\w \n]+)\*/'
word_groups = re.findall(pattern, s, re.MULTILINE)

d = {}
for word_group in word_groups:
    words = word_group.strip().split('\n\n')
    d[words[0]] = words[1:]

print(d)

输出:

{'Goodmorning': ['Alex', 'Dog', 'House', 'Red'], 'Goodnight': 
['Maria', 'Cat', 'Office', 'Green']}
于 2019-09-24T08:05:01.033 回答