Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:从文本中选择特定行_Python_Python 2.7_Linecache - Fatal编程技术网

Python:从文本中选择特定行

Python:从文本中选择特定行,python,python-2.7,linecache,Python,Python 2.7,Linecache,我正在尝试编写一个代码: 打开一个文本文件 转到以“开始”开头的行 从以“开始”开头的行(以前选择)转到第3行 检查该行是否包含“包含”字 如果是=打印“确定”: 我需要集成“第三行”条件,开销可能很小,但如果您的文件不是太大,我会转储列表L中的每一行,然后循环遍历该列表-如果r行以str1开头,您可以执行L[r+3]并检查它是否包含“contain”。开销可能很小,但如果您的文件不是太大,我只需转储列表L中的每一行,然后循环遍历该列表-如果行r以str1开头,您只需执行L[r+3]并检查它

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

  • 打开一个文本文件
  • 转到以“开始”开头的行
  • 从以“开始”开头的行(以前选择)转到第3行
  • 检查该行是否包含“包含”字
如果是=打印“确定”:


我需要集成“第三行”条件,开销可能很小,但如果您的文件不是太大,我会转储列表L中的每一行,然后循环遍历该列表-如果r行以str1开头,您可以执行L[r+3]并检查它是否包含“contain”。

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

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

然后检查位置是否与相对偏移相匹配

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]

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

然后检查位置是否与相对偏移相匹配

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]

为了更好地使用内存,您可以使用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==检查+3条件将检查您的第三行条件。

为了更好地使用内存,您可以使用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条件将检查您的第三行条件。

@ 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"

< 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"

你可以添加一个计数器变量你可以添加一个计数器变量文件大约1mb;内存/缓存使用率越低=脚本越好。文件大小约为1mb;内存/缓存使用量越少=脚本越好。这有一个缺点:假设第1行、第2行包含
Start
、第4行包含
contain
,此方法将
miss
。为我提供了一些修改+来自@zineb的建议。这有一个缺点:假设第1行、第2行包含
Start
,第4行有
包含
,此方法将
忽略
。为我提供了一些修改+来自@zineb.lThanks的建议。。如果我们想在生产线开始处查看今天的日期。。就像“datetime.date.today()”,这样行吗?我试着将它与“if line in datetime…”一起使用,但它不起作用。请您进一步澄清,您想检查行开头是否存在某些日期吗?或者只是今天的date@Mehdiouahabi我编辑回复以检查行开始/包含今天的日期是否对我帮助太多,谢谢你,Zineb。谢谢你的想法。。如果我们想在生产线开始处查看今天的日期。。就像“datetime.date.today()”,这样行吗?我试着将它与“if line in datetime…”一起使用,但它不起作用。请您进一步澄清,您想检查行开头是否存在某些日期吗?或者只是今天的date@Mehdiouahabi我编辑回复以检查行开始/包含的日期是否对我帮助太多,谢谢你,Zineb。