1

我正在尝试编写一个代码:

  • 打开一个文本文件
  • 转到以“开始”开头的行
  • 从以“start”开头的行(之前选择)转到第 3 行
  • 检查该行是否包含“包含”字样

如果是 = 打印“确定”:

str1 = "Start"

with open("C:...test.txt") as file:
for line in file:
    if str1 in line:
        if "contain" in line:
            print "OK"
        else:
            print "NOK"

我需要整合“3rd line”条件

4

4 回答 4

1

为了更好地使用内存,您可以使用 enumerate 进行行号跟踪:

str1 = "Start"
fp = open("C:...test.txt")
check = 0
for i,line in enumerate(fp):
    if str1 in line:
        check = i
        continue
    if "contain" in line and (i == check + 3):
        print "OK"
    else:
        print "NOK"

这里 i == check + 3 条件将检查您的第 3 行条件。

于 2015-08-17T13:03:06.797 回答
0

@Mehdi ouahabi 你示意“转到以Start开头的行”,所以我们只检查以“Start”开头的行,而不是那些在中间或末尾包含Start的行:

with open("test.txt") as file:
    for line in file:
        if line.startswith("Start"): #instead of "str1 in line" 
            if "contain" in line: print "OK"
            else: print "NOK"

***编辑:***在这种情况下,您将检查一行是否开始/包含今天的日期

from datetime import date
with open("test.txt") as file:
    for line in file:
       #if str(date.today()) in line:#check if today's date exist in the line
       if line.startswith(str(date.today())): #check if the line start with today's dates
            if "contain" in line: print "OK"
            else: print "NOK"
于 2015-08-17T17:48:26.823 回答
0

Might be small overhead, but if your file isn't too big, I'd just dump every line in a list L, then loop through that list - if row r starts with str1, you can just do L[r+3] and check if it contains 'contain'.

于 2015-08-17T12:16:49.473 回答
0

使用两个列表来存储与您的规则匹配的位置。

然后检查与您的相对偏移量匹配的位置。

start_lines = []
contains_lines = []
with open("C:...test.txt") as inp:
    line_num = 0
    for line in inp:
        if line.startswith("start"):
            start_lines.append(line_num)

        if "contains" in line:
            contains_lines.append(line_num)

        line_num += 1

print [line_num for line_num in contains_lines if line_num - 3 in start_line]
于 2015-08-17T12:40:20.950 回答