【问题标题】:Searching in a .txt file (JSON format) for a particular string and then printing a specific key在 .txt 文件(JSON 格式)中搜索特定字符串,然后打印特定键
【发布时间】:2017-03-05 04:59:52
【问题描述】:

我必须以字符串的形式从用户那里获取输入,然后必须在 JSON 格式的 .txt 文件中搜索它。如果文本匹配,则必须执行 X,否则 Y。例如,如果用户输入“mac”,我的代码应显示包含搜索词“mac”的词条的完整名称。

我的 JSON 文件当前包含巨无霸作为一个项目,当我搜索“mac”时,它什么也没有显示,而它必须显示我(0 巨无霸)。 0 是索引号,也是必需的。

  if option == 's':
        if 'name' in open('data.txt').read():
            sea = input ("Type a menu item name to search for: ")
            with open ('data.txt', 'r') as data_file:
                data = json.load(data_file)
            for line in data:
                if sea in line:
                    print (data[index]['name'])
                else:
                    print ('No such item exist')
        else:
            print ("The list is empty")
            main()

我已经应用了许多解决方案,但没有一个有效。

【问题讨论】:

  • 您能否提供(相关行)您的 .txt 文件?
  • if sea in line 正在字典列表中搜索一个永远不会匹配的字符串。
  • [{“卡路里”:540,“名称”:“巨无霸”,“碳水化合物”:45,“蛋白质”:25,“脂肪”:29,“胆固醇”:75,“钠”:1040},{“卡路里”:760,“名称”:“Whopper”,“碳水化合物”:53,“蛋白质”:33,“脂肪”:47,“胆固醇”:100,“钠”:1410 }]
  • 是的,它正在字典列表中搜索。
  • 得到答案后不要更改问题

标签: python json search


【解决方案1】:

How to search if dictionary value contains certain string with Python

由于您知道您正在查找存储在“名称”键的值中的字符串,因此您可以更改:

if sea in line

到:

if sea in line['name']

(或if sea in line.get('name'),如果您的字典有可能没有“名称”键)。

但是,您正在尝试使用 index 而没有在任何地方进行设置。如果您需要跟踪您在列表中的位置,最好使用enumerate

for index, line in enumerate(data):
    if sea.lower() in line['name'].lower():
        print ((index, line['name']))

如果您希望 'm' 匹配 'Big Mac',则需要进行不区分大小写的匹配('m' 与 'M' 不同)。请参阅上面的编辑,它在比较之前将所有字符串转换为小写。

【讨论】:

  • elif option == 's': if 'name' in open('data.txt').read(): sea = input ("键入要搜索的菜单项名称:") file = open('data.txt', 'r') data = json.load(file) file.close() for sub_dict in data: if sea in sub_dict['name']: print (sub_dict['name'] ) main() else: main() else: print ("列表为空") main()
  • 它也部分工作,而不是字典中的第二或第三项。如果输入小写字母则不匹配
  • @TalhaFarrukh 如果您输入“whopper”(搜索第二本词典),那么您最终将浏览您的 else: main() 子句,并停止搜索列表。
  • 那我该怎么办?
  • 解决了大小写字符的问题,但仍然没有在字典中搜索其他项目
猜你喜欢
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
相关资源
最近更新 更多