如何有条件地跳过不包含pd.read_html()中的表的html文件?

时间:2019-03-28 18:27:07

标签: python pandas try-except

我想遍历多个目录,每个目录在本地计算机上都包含一个HTML文件。我将每个文件的路径存储在一个list变量中,但是现在我想遍历每个文件并将其读入pd.read_html之类的东西,以便从HTML文件中提取表信息。但是,某些文件不包含任何表,因此会引发错误ValueError: No tables found。当然会出现此错误,我只需要跳过这些所需的逻辑帮助即可。

我已经尝试阅读pd.DataFrame(在这里:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html)和pd.read_html(在这里:https://pandas.pydata.org/pandas-docs/version/0.22/generated/pandas.read_html.html)文档,但是找不到逻辑正在寻找。

这是我到目前为止所做的

# initialize the path
p = Path('C:/path/to/directories/')

# glob all html file paths into list of paths
html_paths = [file for file in p.glob('**/*.html')]

因此,现在我有了一个要迭代并读入pd.read_html的路径列表。我可以使用以下代码轻松做到这一点:

# initialize empty data frame to append pd.read_html() output to
html_files = pd.DataFrame()

# iterate over each file and read in using pandas
for p in html_paths:
     html_files.append(pd.read_html(str(p)))

但是,由于我的一些html文件不包含任何表,因此当我的for循环遍历这些文件时,我得到一个错误。我希望有一种方法可以在读取它们时跳过没有表的这些文件,以便仅添加其余文件而不破坏代码。

1 个答案:

答案 0 :(得分:1)

您可以简单地

for p in html_paths:
     try:
         html_files = html_files.append(pd.read_html(str(p)))
     except ValueError:
         pass