Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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中找到行的一部分,则从文件打印行_Python_File_Search - Fatal编程技术网

如果在Python中找到行的一部分,则从文件打印行

如果在Python中找到行的一部分,则从文件打印行,python,file,search,Python,File,Search,我正在尝试编写一个函数,允许用户输入姓名或电话号码,检查它是否存在于文件中,以及是否打印出找到该元素的整行。到目前为止,我已经: def searchPlayer(): with open("players.txt") as f: data = f.readlines() print "Enter 0 to go back" nameSearch = str(raw_input("Enter player surname, forname,

我正在尝试编写一个函数,允许用户输入姓名或电话号码,检查它是否存在于文件中,以及是否打印出找到该元素的整行。到目前为止,我已经:

def searchPlayer():
    with open("players.txt") as f:
        data = f.readlines()
        print "Enter 0 to go back"
        nameSearch = str(raw_input("Enter player surname, forname, email, or phone number: "))

        if any(nameSearch in s for s in data):
            #Finding the element in the list works
            #Can't think of a way to print the entire line with the player's information
        else:
            print nameSearch + " was not found in the database"
文件的格式如下:

Joe;Bloggs;j.bloggs@anemailaddress.com;0719451625
Sarah;Brown;s.brown@anemailaddress.com;0749154184
因此,如果nameSearch==Joe,那么输出应该是
Joe;布洛格斯;Jbloggs@anemailaddress.com;0719451625

如果您有任何帮助,我们将不胜感激,谢谢您

为什么不使用循环

for s in data:
    if nameSearch in s:
        print s
        break
any
仍在循环,从:

为什么不使用循环呢

for s in data:
    if nameSearch in s:
        print s
        break
any
仍在循环,从:


看起来太复杂了,就这么做吧

with open("players.txt") as f:
  for line in f:
    if nameSearch in line:
       print line

看起来太复杂了,就这么做吧

with open("players.txt") as f:
  for line in f:
    if nameSearch in line:
       print line

正如@alexis在评论中提到的,如果您想知道哪一行匹配,就不应该使用
any()
。在这种情况下,您应该使用循环:

found = False
for s in data:
    if nameSearch in s:
        print s
        found = True
        #break # Optional.  Put this in if you want to print only the first match.

if not found:
    print "{} was not found in the database".format(nameSearch)

如果您只想打印第一个匹配项,请在
break
之前去掉哈希符号,如果未找到,则将
更改为
,否则:

正如@alexis在评论中提到的,如果您想知道哪一行匹配,则不应使用
any()
。在这种情况下,您应该使用循环:

found = False
for s in data:
    if nameSearch in s:
        print s
        found = True
        #break # Optional.  Put this in if you want to print only the first match.

if not found:
    print "{} was not found in the database".format(nameSearch)

如果您只想打印第一个匹配项,请在
break
之前取出哈希符号,如果未找到,则将
更改为
else:

您不能像其他人提到的那样使用
任何
,但如果您想保留更紧凑的代码,可以使用
next
。而不是:

if any(nameSearch in s for s in data):
您可以使用:


注意:您可能希望在此处使用
csv.reader
或类似的方法进行解析,否则会导致数据格式错误;如果用户输入
您将盲目返回第一条记录,即使
正在格式化,而不是字段数据。类似地,搜索
Jon
会找到名为
Jon
Jonathan
的第一个人,或者可能存在的以
Jon
开头的任何其他名字。你不能像其他人提到的那样使用
any
,但是如果你想保持更紧凑的代码,你可以使用
next
。而不是:

if any(nameSearch in s for s in data):
您可以使用:


注意:您可能希望在此处使用
csv.reader
或类似的方法进行解析,否则会导致数据格式错误;如果用户输入
您将盲目返回第一条记录,即使
正在格式化,而不是字段数据。类似地,搜索
Jon
会找到第一个名为
Jon
Jonathan
的人,或者可能存在的以
Jon
开头的任何其他名字。问题是
any(…)
没有告诉您哪一行匹配。将其解压到一个循环中,您会发现这样做更容易。问题是
any(…)
不会告诉您哪一行匹配。将它解压到一个循环中,你会发现它更容易实现。它会循环,但会短路(你需要在循环中添加一个
break
,使其等效),而在CPython(引用解释器)中,它是用C实现的,这可以使它大大快于详细说明的循环。当然,如果它不能满足您的需要,则没有帮助。:-)你是对的,编辑-我不知怎么错过了返回lol,我想你也可以说
returnprint(s)
It循环,但它会短路(你需要在循环中添加
break
,使其等效),在CPython(引用解释器)中,它是用C实现的,这可以使它大大快于指定的循环。当然,如果它不能满足您的需要,则没有帮助。:-)你是对的,编辑-我不知怎么错过了返回lol,我想你也可以说
returnprint(s)