2016-05-16 14 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

謝謝!沒想到它可能如此簡單。它完美的作品。感謝你的幫助! –