假设我有一个像这样的数据集
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
答案 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]