2016-05-16 68 views
0

我目前使用此代码的工作:如何继续下一档的第一场比赛之后 - Python 3.x都有

from bs4 import BeautifulSoup 
import glob 
import os 
import re 
import contextlib 


@contextlib.contextmanager 
def stdout2file(fname): 
    import sys 
    f = open(fname, 'w') 
    sys.stdout = f 
    yield 
    sys.stdout = sys.__stdout__ 
    f.close() 


def trade_spider(): 
    os.chdir(r"C:\Independent Auditors Report") 
    with stdout2file("auditfeesexpenses.txt"): 
     for file in glob.iglob('**/*.html', recursive=True): 
      with open(file, encoding="utf8") as f: 
       contents = f.read() 
       soup = BeautifulSoup(contents, "html.parser") 
       for item in soup.findAll("ix:nonfraction"): 
        if re.match(".*AuditFeesExpenses", item['name']): 
         print(file.split(os.path.sep)[-1], end="| ") 
         print(item['name'], end="| ") 
         print(item.get_text()) 
trade_spider() 

它所做的是: - 打开文本文件 - 搜寻所有。在HTML文件中指定目录 - 如果正则表达式匹配 - >打印结果到指定的文本文件

在每个HTML文件中有多达两个字符串包含我的正则表达式。这意味着有时我有两个结果为每个文件。现在我想要做的是告诉Python它应该自动将继续继续到下一个文件IF RegEx找到了一个匹配(没有匹配是好的,因为python已经自动进入下一个文件if它找不到匹配项)。

所以我的成绩应该要么不匹配(如果是什么罚款)或一场比赛,然后比继续下一文件,而无需第二个字符串与我的正则表达式匹配。

可你们谁帮我在这?有没有简短而优雅的魔法可以插入到我的代码中,而不会变得太多?

任何帮助表示赞赏!

P.S.我已经通过stackflow进行了搜索,因为匹配问题是一个非常受欢迎的问题,但是我找不到任何与我的问题相匹配的问题。如果我错过了关于此主题的一些相关问题,对此抱歉,如果您可以发布相关链接,我将不胜感激。

回答

0

尝试在最里面if添加break

if re.match(".*AuditFeesExpenses", item['name']): 
    print(file.split(os.path.sep)[-1], end="| ") 
    print(item['name'], end="| ") 
    print(item.get_text()) 
    break 

只要没有匹配,现在最内层的for就会继续。如果匹配,则输入if块并在发生故障时执行。

评论,如果它不为你工作。

+0

谢谢!没想到它可能如此简单。它完美的作品。感谢你的帮助! –

相关问题