【问题标题】:"How to fix "Display Returned Value From One Def To Another" "“如何修复“从一个 Def 显示返回值到另一个”“
【发布时间】:2018-12-25 15:56:09
【问题描述】:

我正在创建一个程序来从文本文件中获取句子并匹配 JSON 文件中的城市名称。匹配不起作用,我无法传递我的返回值。

我尝试过先做简单而不创建类并检查静态城市。

import json

with open("store.txt", "r+") as g, open("city.json") as c:
   dat1 = json.load(c)
   dat = g.readlines()
   # print(dat)


# def hel():
#     for items1 in dat1:
#         gat = items1.get("name")
#         print(gat)

class One:

    def __init__(self):
       self.dat = dat
       self.dat1 = dat1

    def leh(self):
       for items in self.dat:
          # print(items)
          # for hy in items:
          return items

    def main(self):
       returned = test_obj.leh()
       print(returned)
       # for items1 in self.dat1:
       #     gat = items1.get("name")
       #     if gat in returned:
       #         print("Got it")


if __name__ == '__main__':
   test_obj = One()
   test_obj.main()

我希望传递的值能够打印城市名称并将其与存储在文本文件中的句子匹配。

store.txt 中的行:

“德里是一座不错的城市。” “伦敦不错。”

city.json 中的行:

[
{
    "id": 1,
    "name": "Surat",
    "country": "IN"
  },
  {
    "id": 1259229,
    "name": "London",
    "country": "GB"
  },
  {
    "id": 1273294,
    "name": "Delhi",
    "country": "IN"
  }
]

【问题讨论】:

  • 请从每个文件中发布几行,以便您的问题更容易理解
  • 您的 leh 函数未解析整个文件。它在阅读第一行后返回。
  • 我需要解析整个文件数据。
  • 仍然不清楚你在问什么。你指的是什么传递的值?您是要打印来自 store.txt 的句子还是来自 json 文件的值?
  • 我正在尝试从 JSON 中获取所有“名称”并在存储在文本文件中的句子中搜索它们。如果匹配,则执行一些操作。

标签: python-3.x


【解决方案1】:

首先,你需要了解 json 是如何工作的。由于我们正在读取一个文件,它被读取为一个字符串,我们 应该使用接受字符串的json.loads。另一个问题是json.loads 需要一个完整的 json 字符串, 但是由于我们的 json 文件被分成几行,我们需要找到一种方法将它们放在一个字符串中。 一种选择是file.read().strip(),它读取整个文件,然后删除像\n 这样的行分隔符。 另一个选项是"".join(file.readlines()),它将文件分成几行,然后将它们连接成一个 细绳。然后在我们解析 json 之后,我们只需要逐行读取文本文件并遍历它们和 json 中的值。以防万一文本文件中的城市写成LoNdOn 我正在使用.lower() 来转换它 到london

import json


with open("city.json") as json_file:
    parsed = json.loads(json_file.read().strip())

with open("store.txt") as text_file:
    sentences = text_file.readlines()

for element in parsed:
    for sentence in sentences:
        if element['name'].lower() in sentence.lower():
            print("{} was found!".format(element))

【讨论】:

  • 谢谢兄弟。使用不同的方法解决了它。但是你的代码比我的好得多,所以我要使用它。我希望这段代码在while循环中。因此,当它完成检查时,它应该再次读取文本文件。万一更改在文件中完成。
  • 我很高兴能帮上忙 :)
  • 你能帮助循环和连续读取文本文件吗?在我身边出现错误。
  • 真的无非是上面的while True: 阅读文本文件。我建议你在写任何东西之前学习 python。
猜你喜欢
  • 2011-11-14
  • 2021-07-21
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多