繁体   English   中英

使用python搜索文本文件中的行

[英]Searching for lines in a text file using python

我正在尝试在txt文件中搜索字符串。 这是一个示例txt文件。 我正在与:

abc
def
ghi
centre
jkl
mno
pqr
123
456

我正在尝试匹配文件中的行,如果找到匹配项,如果找不到匹配项,则退出程序,然后将行添加到文件中:

我有以下正在使用的代码:我的问题是,如果我尝试匹配文件中的“ abc”,它可以正常工作,但是如果我尝试匹配“ pqr”,我会看到我的第二个if块也被执行了。

以下是我到目前为止的代码。

#!/usr/bin/python

new_data = raw_input("Enter txt:")    
file_name = "test.txt"

with open(file_name, "r") as F:
    data = F.readlines()

for num, line in enumerate(data, start=1):
    if line.strip() == new_data:
        print "exists {} {}".format(new_data, num)
        break

    if line.strip() != new_data:
        print "new data {} to be entered into line {}".format(new_data, num)

     else:
         print "break"

以下是我尝试从文件中匹配“ 123”时得到的输出:

Enter txt:123
new data 123 to be entered into line 1
new data 123 to be entered into line 2
new data 123 to be entered into line 3
new data 123 to be entered into line 4
new data 123 to be entered into line 5
new data 123 to be entered into line 6
new data 123 to be entered into line 7
exists 123 8

IIUC,您希望仅当数据不存在时才执行第二个块。 好吧,试试这个:

for num, line in enumerate(data, start=1):
    if line.strip() == new_data:
        print "exists {} {}".format(new_data, num)
        break
else:
    print "new data {} to be entered into line {}".format(new_data, num)

您可以利用for...else语法。 如果循环不break ,即文件中不存在数据,则执行else

您的代码存在的问题是,如果在迭代中未找到new_data则第二个条件将打印new data to be entered即使该new data to be entered在后续迭代中也存在,则只有第一个数据abc会从迭代开始时提供所需的结果。

@COLDSPEED已经给出了一个好的解决方案。

另一个基本方法可能是:

for num, line in enumerate(data, start=1):
    if line.strip() == new_data:
        flag = 1
        print("exists {} {}".format(new_data, num))
        break
    else:
        flag = 0

if flag == 0:
    print("new data {} to be entered into line {}".format(new_data, num))

它将遍历整个数据,如果找到了new_data ,它将flag设置为1并中断,否则它将flag设置为0并打印new data to be entered

希望这个帮助:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM