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。