如何在Python中循环时读取几行代码?

时间:2012-02-06 19:33:26

标签: python file text-files

我想知道在Python 2.7中是否有办法读取文本文档来查找某些单词,然后如果找到这些单词,它会读取几行以查找新单词。如果它没有找到新单词,它将返回寻找第一个单词。

例如,我的文字文档如下所示:

1.Section

2. Cheesecake
3. 0
4. 0
5. 0
6. Tastes good
7. 0
8. 0
9. Donut
10. 0
11. Tastes good
12. 0
13. Cheesecake
14. 0
15. 0
16. Tastes bad

这是我到目前为止的代码:

import sys

fileName = open("filename.txt", "r")

while True:
    line = fileName.readline()
    if line is None: break
    else:
        if line.startswith('CHEESECAKE'):
            print (line)
            x = raw_input(" Continue? ")
            if x == "n":
                sys.exit()

从现在开始,我不知道该怎么做!我怎样才能找到奶酪蛋糕,然后检查它们的味道是否合适?

4 个答案:

答案 0 :(得分:1)

沿着这些方向尝试......

 if line.startswith('CHEESECAKE'):
       do something
     elseif line.startswith('tastegood'):
     do something
 else:
   do something
   print (line)
   x = raw_input(" Continue? ")
   if x == "n":
            sys.exit()

答案 1 :(得分:0)

您可以使用thisline=line.next()

之类的内容在行迭代器中前进

您还可以使用类似

的内容继续阅读主循环中的行
for tmp in line:
    if tmp eq "bla" : 
       ... do something.
       break

答案 2 :(得分:0)

使用正则表达式:

filecontent = open("filename.txt", "r").read()
results = re.findall('Cheesecake.*?Tastes\s+?(\w*)\s+?', filecontent, re.DOTALL)
print results

在文件中查找模式的最佳方法是在一个步骤中一次性读取它,除非它是一个非常长的文件。 然后,使用带有re.DOTALL标志的正则表达式。这意味着换行被视为常规字符,允许搜索模式跨越多行。

如果需要,可以将其中的一部分与之前的代码混合,以允许用户一次进行一次匹配。然后,您应该使用re.search(pattern, text, re.DOTALL).group(1)来获取每个匹配内容。

答案 3 :(得分:0)

您还可以将记录从一个关键字分组到下一个关键字。

import sys

def process_group(list_in): if len(list_in): for rec in list_in: if rec.startswith("Tastes"): print "Tastes found for", list_in[0] return print "Tastes NOT found for", list_in[0]

open_file = open("filename.txt", "r")

group_list=[] start_list=["CHEESECAKE", "DONUT"] for line in open_file: for st in start_list: if line.upper().startswith(st): ## process this group print (line) process_group(group_list) group_list=[] ## an empty list for the next group x = raw_input(" Continue? ") if x == "n": sys.exit() group_list.append(line)

process_group(group_list) # process the last group