Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用关键字搜索json文件中的某一行?_Python_Json_Search_Keyword - Fatal编程技术网

Python 如何使用关键字搜索json文件中的某一行?

Python 如何使用关键字搜索json文件中的某一行?,python,json,search,keyword,Python,Json,Search,Keyword,我想知道如何搜索具有特定名称的行。这是带有json的my.txt文件: {"people": [{"name": "Scott", "website": "stackabuse.com", "from": "Nebraska"}, {"name": "Larry", "website": "google.com", "from": "Michigan"}, {"name": "Tim", "website": "apple.com", "from": "Alabama"}]} 这是我的密码 导

我想知道如何搜索具有特定名称的行。这是带有json的my.txt文件:

{"people": [{"name": "Scott", "website": "stackabuse.com", "from": "Nebraska"}, {"name": "Larry", "website": "google.com", "from": "Michigan"}, {"name": "Tim", "website": "apple.com", "from": "Alabama"}]}
这是我的密码

导入json
文件=打开('data.txt',“r”)
read=file.read()
y=json.loads(读取)
first=y[“人”][0]
第二个=y[“人”][1]
第三个=y[“人”][2]
打印(y[“人员”][0][“姓名”])

这会打印出Scott,但是有没有办法在json文件中搜索名为Scott的行?我试过打印(y[“people”][“name”:“Scott”]),但没用。我希望输出为{“name”:“Scott”,“website”:“stackcrash.com”,“from”:“Nebraska”}

我建议使用jmespath()

您可以使用。e、 g

>>> people = y['people']
>>> people_named_scott = [p for p in people if p['name'] == 'Scott']
>>> people_named_scott
[{'name': 'Scott', 'website': 'stackabuse.com', 'from': 'Nebraska'}]

如果我理解正确,您正在尝试打印名为Scott的json列表

print([jobj if jobj['name']=='Scott' for jobj in y['people']])

您可以这样做,它迭代所有人,然后返回具有匹配名称的第一个人

def getPersonByName(allInfo, name):
    for info in allInfo["people"]:
        if info["name"] == name:
            return info

allInfo = {"people": [{"name": "Scott", "website": "stackabuse.com", "from": "Nebraska"}, {"name": "Larry", "website": "google.com", "from": "Michigan"}, {"name": "Tim", "website": "apple.com", "from": "Alabama"}]}

print(getPersonByName(allInfo, "Scott"))

您可以将姓名为
Scott
的人员信息存储在列表中

Python代码:

import json

file = open('data.txt', "r")
read = file.read()
y = json.loads(read)
people = y["people"]
lines = [person for person in people if person["name"] == "Scott"]
if len(lines) == 0:
    print("Scott is not found")
else:
    for line in lines:
        print(line)
data.txt

{"people": [{"name": "Scott", "website": "stackabuse.com", "from": "Nebraska"}, {"name": "Larry", "website": "google.com", "from": "Michigan"}, {"name": "Tim", "website": "apple.com", "from": "Alabama"}]}
输出:

{'name': 'Scott', 'website': 'stackabuse.com', 'from': 'Nebraska'}
您可以将内置函数与解决方案的表达式结合使用

data={"people": [{"name": "Scott", "website": "stackabuse.com", "from": "Nebraska"}, {"name": "Larry", "website": "google.com", "from": "Michigan"}, {"name": "Tim", "website": "apple.com", "from": "Alabama"}]}
print(filter(lambda x:x['name'] == 'Scott',data['people']))
# gives [{'website': 'stackabuse.com', 'from': 'Nebraska', 'name': 'Scott'}]

如果我理解正确,您正在尝试打印名为Scott的json列表。然后[jobj如果jobj['name']=='Scott'代表y['people']]中的jobj]好的,谢谢!这起作用了。我7分钟后再加一张支票。我想说的很清楚:人的p代表p意味着它搜索每一行?@maxmeinz,检查一下,它就像一个范围循环,每次有新行时都搜索它?(我所说的行是{“name”:“Scott”,“website”:“stackcrash.com”,“from”:“Nebraska”})如果名为“Scott”的行不存在,有没有办法显示错误消息?@maxmeinz,更新了代码。如果
不包含任何元素,则我们可以向用户显示消息。你想抛出一个错误吗?哦,好的,它起作用了!因为如果你不这样做,那么它只打印[],这是0行,对吗?@maxmeinz,是的,如果
line
为空,那么就没有包含名称
Scott
的行。