[英]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.