簡體   English   中英

如何遞歸讀取目錄中的所有html文件?

[英]How do I read all html-files in a directory recursively?

我試圖將所有html文件Doctype打印到txt文件。 我沒有Python的經驗,所以請耐心等待一下。 :)

最終腳本應該從html文件中刪除元素,具體取決於html文件中設置的Doctype中給出的html版本。 我也試圖在PHP中列出文件,它在某種程度上起作用。 我認為Python是這項任務的更好選擇。

下面的腳本是我現在所擁有的,但是我無法弄清楚如何寫一個“for each”來遞歸地獲取arkivet文件夾中每個html文件的Doctype。 我目前只打印文件名和擴展名,我不知道如何獲取它的路徑,或者如何利用BeautifulSoup編輯和從文件中獲取信息。

import fnmatch
from urllib.request import urlopen as uReq
import os
from bs4 import BeautifulSoup as soup
from bs4 import Doctype

files = ['*.html']
matches = []

for root, dirnames, filenames in os.walk("arkivet"):
    for extensions in files:
        for filename in fnmatch.filter(filenames, extensions):
            matches.append(os.path.join(root, filename))
            print(filename)

matches是一個數組,但我不確定如何在Python中正確處理它。 我想將帶有擴展名的文件名,文件名和文檔類型打印到root文本文件中。

腳本在使用Python 3.5的本地Vagrant Debian服務器上的CLI中運行(Python 2.x也存在)。 所有文件和文件夾都存在於服務器public root下名為arkivet(archive)的文件夾中。

任何幫助贊賞! 我被困在這里:)

Vikas的答案可能就是你所要求的,但是如果他不正確地解釋了這個問題,那么你知道在循環,根,dirnames和文件名中你可以訪問所有這三個變量是值得的。 您當前只打印基本文件名稱:

print(filename)

也可以打印完整路徑:

print(os.path.join(root, filename))

Vikas通過使用不同的函數(os.listdir)解決了目錄名稱的缺失,但我認為這將失去遞歸的能力。

你發布的os.walk的組合,以及打開Vikas的文件閱讀文件的內部可能是你想要的?

由於你沒有標記任何答案解決方案,我猜你從來沒有得到你的回答。 這里有一大塊代碼遞歸搜索文件,打印完整的文件路徑,並在html文件中顯示Doctype字符串(如果存在)。

import os
from bs4 import BeautifulSoup, Doctype

directory = '/home/brian/Code/sof'
for root, dirnames, filenames in os.walk(directory):
    for filename in filenames:
        if filename.endswith('.html'):
            fname = os.path.join(root, filename)
            print('Filename: {}'.format(fname))
            with open(fname) as handle:
                soup = BeautifulSoup(handle.read(), 'html.parser')
                for item in soup.contents:
                    if isinstance(item, Doctype):
                        print('Doctype: {}'.format(item))
                        break

如果要讀取特定目錄中的所有html文件,可以嘗試以下方法:

import os
from bs4 import BeautifulSoup

directory ='/Users/xxxxx/Documents/sample/'
for filename in os.listdir(directory):
     if filename.endswith('.html'):
         fname = os.path.join(directory,filename)
         with open(fname, 'r') as f:
             soup = BeautifulSoup(f.read(),'html.parser')
             # parse the html as you wish

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM