我正在像python中的查询那样创建此搜索,该搜索收集id并使用诸如whois数据库之类的名称解析它们。

所以可以说这是我在.txt文件中的数据

["81448068", "jimmy"]
["69711823", "bob"]
["92739493", "kyle, jimmy"]
["96399981", "kyle"]
["40112089", "john, peter"]
["79784393", "matthew, chad"]
["749968","bob, jimmy"]


该ID位于左列,而其右侧则是与之关联的名称。
在所有名称完全匹配之前,我将如何使用while或for循环类型进行数据搜索?并且如果添加了任何数据,此方法应该可以使用,我将向您显示当前的内容,但是在具有更多名称的较大txt文件上,它将不起作用

def getNames(name):
    x = []
    f = open("names.txt","r") # that data up there represents names.txt
    for line in f.readlines():
        rid,names = json.loads(line.strip())
        if name in names:
           x += names.split(", ")
    return list(set(x))


我想将这些名称循环回获取名称,以获取更多与x中返回的名称相关联的名称,但是我必须手动为另一个添加另一个,是否存在某种类型的while会循环播放直到所有相关联的匹配与名字被找到?因此,执行getNames(“ jimmy”)会返回,

["bob","jimmy","kyle"]


然后它将检查与bob关联的所有名称,与这些名称关联的所有名称,直到不再关联为止,并且还将对jimmy和Kyle执行此操作。

因此,基本上,它将搜索初始名称,在这种情况下,请使用jimmy。它返回与“ jimmy”关联的名称,然后搜索与之关联的每个单独的名称,因此可以说它返回[[bob”,“ jimmy”,“ kyle”]
然后,将需要bob,在名称中搜索具有该名称的所有名称,然后搜索所有这些名称并搜索所有这些名称,直到进行所有名称,然后它就会像jimmy一样进行操作,然后转到Kyle并执行相同。我可以使用for来做到这一点,但我需要添加多个fors,具体取决于我希望搜索的范围,我要花一会儿时间,以便它进行数据直到找到所有匹配项。

最佳答案

这很有趣。我的基本策略是在处理文件期间修复关联,而不是事后搜索。我没有测试过,但是尽管有错字,它也可以工作。

编辑:现在我已经对其进行了测试。

文件names.txt

["81448068", "jimmy"]
["69711823", "bob"]
["92739493", "kyle, jimmy"]
["96399981", "kyle"]
["40112089", "john, kyle"]
["79784393", "matthew, chad"]
["749968"  , "bob, jimmy"]


处理文件:

import json

def process_new_file(filename, associations=None):
    if associations == None:
        associations = {}
    with open(filename, 'r') as f:
        lines = f.readlines()
    for line in lines:
        rid, onames = json.loads(line.strip())
        extras = set([x.strip() for x in onames.split(',')])
        names = set()
        while len(extras) > 0:
            names.update(extras)
            extras = set()
            for name in names:
                if not name in associations:
                    associations[name] = set()
                extras.update(associations[name] - names)
        for name in names:
            associations[name].update(names)
    return associations

if __name__ == '__main__':
    associations = process_new_file('names.txt')
    tmpl = '{:20}: {}'
    for person in associations:
        print tmpl.format(person, ', '.join(associations[person]))


输出:

jimmy               : jimmy, bob, john, kyle
chad                : matthew, chad
kyle                : jimmy, bob, john, kyle
matthew             : matthew, chad
bob                 : jimmy, bob, john, kyle
john                : jimmy, bob, john, kyle

关于python - 在python中创建循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19259414/

10-11 20:33