如何定义函数来查找特定符号

时间:2016-12-14 12:17:06

标签: python function segment

假设我有一个像这样的数据集

 Language: English

 Place: Seattle

 Segments: b,p,m,d,t


 Language: Mandarin

 Place: HK

 Segments: n,i,o,h


 Language: Cantonese

 Place:HK

 Segments:l,e,h,o

它继续有这样的模式。

我如何制作定义功能,以检查特定城市的语言。

到目前为止我所拥有的是:(虽然不对) 语言=列表()

def lang_from(location):
    file=open("data.txt")
    lang = file.readline().replace("/n", "").replace("Language:", "")
    city = file.readline().replace("/n", "").replace("Place:", "")
    seg = file.readline().replace("/n", "").replace("Segments:", "")
    for place in file:
        if location in place:
            languages.append(language.lang)
        else:
            break

我希望我的输入是:

    print(lang_from("HK")) 

,输出为

       Cantonese, Mandarin

2 个答案:

答案 0 :(得分:0)

也许正则表达式是最简单的方法(尽管可能很难捕获边缘情况:

import re

def lang_from(location):

    pattern = 'Language:\s*(\w+)\s*Place:\s*{}'.format(location)
    with open('data.txt', 'r') as f:
        print(re.findall(pattern, f.read()))

if __name__ == '__main__':

    lang_from('HK')
# prints ['Mandarin', 'Cantonese']

您可以修改正则表达式here

答案 1 :(得分:0)

在两个换行符处拆分原始数据,你得到

 Language: English

 Place: Seattle

 Segments: b,p,m,d,t

修剪

的空行
 Language: English
 Place: Seattle
 Segments: b,p,m,d,t

result_list = your_string.split('\n').rstrip()

 ['Language: English','Place: Seattle','Segments: b,p,m,d,t']

制作一个这样的循环:

dict = {}
for r in result_list:
    item = r.split(':')
    key = item[0] # Language
    value = item[1].strip() # English
    dict[key] = value

此时你有一个很好的结构化词典,你可以轻松过滤。

{
 'Language': 'English',
 'Place': 'Seattle',
 'Segments': 'b,p,m,d,t'
}
  

我如何制作一个可以检查内容的定义函数   特定城市的语言。

def get_language_for(city):
    return [ v['Language'] for k, v in dict.items() if v['Place'] == city ][0]