Python:从文本中选择一个特定的行

时间:2015-08-17 12:12:05

标签: python python-2.7 linecache

我正在尝试制作一个代码:

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

如果是=打印“ok”:

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"

我需要整合“第3行”条件

4 个答案:

答案 0 :(得分:0)

可能是小开销,但是如果你的文件不是太大,我只是将每一行转储到列表L中,然后遍历该列表 - 如果行r以str1开头,你可以只做L [r +3]并检查它是否包含“包含”。

答案 1 :(得分: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]

答案 2 :(得分:0)

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

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"

这里我= =检查+ 3条件将检查你的第3行条件。

答案 3 :(得分:0)

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

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"