Как условно пропустить HTML-файлы, которые не содержат таблиц в pd.read_html ()? - PullRequest
1 голос
/ 28 марта 2019

Я хочу перебрать несколько каталогов, каждый из которых содержит файл HTML на моем локальном компьютере. У меня есть пути для каждого файла, хранящиеся в переменной списка, но теперь я хочу перебрать каждый из них и прочитать его во что-то вроде 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 Ответ

1 голос
/ 28 марта 2019

Вы могли бы просто сделать

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