如果在.txt文件中找不到任何行,则打印一次

时间:2019-04-26 19:13:19

标签: python-3.x

如果在任何行中都没有找到变量,我的代码只能打印一次。如果找到该行,它可以很好地进行打印,但是如果找不到该行,则完全是一团糟。

.txt文件看起来像这样,但更长了:

14312 Dog 
54314 Cat 
76543 Pig
53244 Chicken
52314 Monkey 
87465 Cow 

这里有我的代码

num = input(str('enter number:'))
with open("numbers.txt") as search:
    for line in search:
        line = line.rstrip()
        if num in line:
            print(line )
        if num not in line:
                print('hello world')

我认为我理解问题所在,该部分显示:

if num not in line:
                print('hello world')

逐一搜索所有行,并且每当用户输入不在一行中时,它就会打印问候世界。我需要它来评估所有行,并且如果无法在用户输入中找到任何行,则仅打印“ hello world”。

有没有简单的方法可以做到这一点?预先感谢!

3 个答案:

答案 0 :(得分:1)

会是这样的:

num = input(str('enter number:'))
found = 0
with open("numbers.txt") as search:
    for line in search:
        line = line.rstrip()
        if num in line:
            print(line)
            found = 1
if found == 0:
    print('hello world')

答案 1 :(得分:1)

听起来很奇怪,但是使用for ... else子句:

num = input(str('enter number:'))
with open("numbers.txt") as f:
    lines = f.readlines()
for line in lines:
    if num in line:
        print(line)
        break
else:
    print("No match!")

只有在for循环永不中断的情况下,else语句才会执行。我认为只有一场比赛。如果要打印多行,则此解决方案将不起作用。最后,最好使用readlines()获取行列表,然后分别对其进行解析。

答案 2 :(得分:1)

其他选项也有效,但这也是使用字典的另一种解决方案。它必须先读取文件,但这是即时查找,因此在读取文件后它将很快。实质上,这将把整个文件读入内存。如果您一次只搜索一个数字(或数字set),我将使用其他解决方案。如果您要多次搜索文件(即多次读取文件),最好只吃掉内存以节省时间。

num = input(str('enter number:'))
animal_numbers = dict()
with open("numbers.txt") as f:
    for line in f.readlines():
        # Read each key and value from the file
        key, val = line.strip().split(' ')
        # Store that value (animal) for that key (the number).
        animal_numbers[key] = val

# If the number is in the numbers
# then we will print it
if num in animal_numbers:
    print("Animal: {} --- Number: {}".format(animal_numbers[num], num))
else:
    print("hello world")