我正在尝试将所有html文件Doctype打印到txt文件。我没有Python的经验,所以请耐心等待一下。 :)
最终脚本应该从html文件中删除元素,具体取决于html文件中设置的Doctype中给出的html版本。我也试图在PHP中列出文件,并且它在某种程度上起作用。我认为Python是完成这项任务的更好选择。
下面的脚本是我现在所拥有的,但是我无法弄清楚如何为每个"写一个"以递归方式获取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)
匹配是一个数组,但我不确定如何在Python中正确处理它。我想将带有扩展名的文件名,文件名和它的doctype打印到root文本文件中。
脚本在使用Python 3.5的本地Vagrant Debian服务器上的CLI中运行(Python 2.x也存在)。所有文件和文件夹都存在于服务器public root下的名为arkivet(archive)的文件夹中。
任何帮助表示赞赏!我被困在这里:)
答案 0 :(得分:2)
维卡斯的答案可能就是你所要求的,但如果他不正确地解释了这个问题,那么你应该知道你可以访问所有这三个变量,因为你需要这样做。重新循环,根,dirnames和文件名。您当前只打印基本文件名:
print(filename)
也可以打印完整路径:
print(os.path.join(root, filename))
Vikas通过使用不同的函数(os.listdir)解决了目录名称的缺失,但我认为这将失去递归的能力。
你发布的os.walk的组合,以及打开Vikas的文件阅读文件的内部可能是你想要的?
答案 1 :(得分:1)
由于你没有标记任何答案解决方案,我猜你从来没有得到你的回答。这里有一大块代码递归搜索文件,打印完整的文件路径,并在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
答案 2 :(得分:0)
如果您想阅读特定目录中的所有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