Я пытаюсь включить код, который позволяет pandas (и openpyxl или любому рабочему методу, который вы можете предоставить) правильно вводить ГИПЕРССЫЛКИ в DataFrame.
Однако, несмотря на кажущиеся успешные попытки в решениях GitHub и StackOverflow (GITHUB: Запрос на функцию: read_excel для поддержки гиперссылок, разделенных на метку и гиперссылку), я не могу успешно экспортировать ГИПЕРССЫЛКИ из файлов Excel (в INPUT_DIR) в DataFrame (и, в конечном итоге, в объединенный файл Excel). Я не получаю никаких ошибок, он просто обрабатывает их, как если бы я не использовал дополнительный код решения, предоставленный https://gist.github.com/zachschillaci27 ... a770d15040. Вполне возможно, что решение существует в приведенных выше ссылках, но я не уверен, как реализовать его с помощью моего кода (мой код обрабатывает несколько файлов Excel в объединенный файл Excel, и решения, похоже, не включают это (?)). Приношу извинения, если мой код слишком зелен, чтобы экстраполировать решение.
Возможная основная проблема: я думаю, что это может быть связано с относительными путями URI (т. е. ../../.. /) ГИПЕРССЫЛОК, которые я использую, а не традиционных URL-адресов (но не уверен?).
Исходные файлы Excel, которые я пытаюсь объединить, содержат ГИПЕРССЫЛКИ
(например, =ГИПЕРССЫЛКА ("../../../data/POD-00011_2408081740.MP3","../../../data/POD-00011_2408081740.MP3")
которые работают - такие, что когда вы нажмете на ячейку, она откроет/выполнит файл, пройдя вверх по 3 каталогам/папкам (т.е. ../../../), а затем перейдя в каталог «data» или «transcripts_output», который я пытаюсь объединить. все файлы Excel с помощью pd.read_excel() и pd.concat() (см. метод 2. ЗДЕСЬ) для объединения файлов Excel в один файл Excel (с соответствующими ГИПЕРССЫЛКАМИ)
Устранение неполадок:
На основе ряда тем Github и StackOverflow:
https://pastebin.com/ 0bBMW8fY
Моя среда установки:
Код: Выделить всё
os platform: Win-64; Win11
conda: 24.7.1
python: 3.10
pandas: 2.2.3
openpyxl: 3.1.5
Код: Выделить всё
import pandas as pd
import openpyxl
from pathlib import Path
def dir_not_empty(_dir: Path) -> bool:
return any(_dir.iterdir())
#### Following Script Used From:#################################################################
# intended to augment pandas read_excel() to accept HYPERLINK cells/data
# https://gist.github.com/zachschillaci27/887c272cbdda63316d9a02a770d15040
def _get_link_if_exists(cell) -> str | None:
try:
return cell.hyperlink.target
except AttributeError:
return None
def extract_hyperlinks_from_xlsx(
file_name: str, sheet_name: str, columns_to_parse: list[str], row_header: int = 1
) -> pd.DataFrame:
df = pd.read_excel(file_name, sheet_name)
ws = openpyxl.load_workbook(file_name)[sheet_name]
for column in columns_to_parse:
row_offset = row_header + 1
column_index = list(df.columns).index(column) + 1
df[column] = [
_get_link_if_exists(ws.cell(row=row_offset + i, column=column_index))
for i in range(len(df[column]))
]
return df
##################################################################################################
# specifying the path to csv files:
INPUT_DIR = Path("./output/xlsx_output/xlsx_run_outputs")
OUTPUT_DIR = Path("./output/xlsx_output/merged_xlsx/merged_podcast_outputs.xlsx")
# csv files in the path
# list of excel files we want to merge.
# pd.read_excel(file_path) reads the
# excel data into pandas dataframe.
if dir_not_empty(INPUT_DIR):
file_list = INPUT_DIR.iterdir()
# Two following lines are commented out/ removed from script and replaced with
# code that attempts to utilize script made from
# https://gist.github.com/zachschillaci27/887c272cbdda63316d9a02a770d15040:
# excl_list = [pd.read_excel(file) for file in file_list]
# print(excl_list)
# Replacement code (see https://gist.github.com/zachschillaci27/887c272cbdda63316d9a02a770d15040)
# meant to allow for HYPERLINKS in pd.read_excel():
column_list = ["input_urls", "output_srt_urls", "output_json_urls", "output_vtt_urls", "output_txt_urls", "output_tsv_urls"]
excl_list = [extract_hyperlinks_from_xlsx(file, 'Sheet1', column_list, row_header=1) for file in file_list]
print(excl_list)
Код: Выделить всё
[ Unnamed: 0 input_urls output_srt_urls output_json_urls ... creation_date creation_time word_count file_sizes
0 0 None None None ... 20240808 1740 13 5036032
1 1 None None None ... 20240808 1754 6 900096
[2 rows x 11 columns]]
Код: Выделить всё
**APPROPRIATE HYPERLINKS to replace Nones**
=HYPERLINK("../../../data/POD-00011_2408081740.MP3", "../../../data/POD-00011_2408081740.MP3") =HYPERLINK("../../transcripts_output/POD-00011_2408081740.srt", "../../transcripts_output/POD-00011_2408081740.srt") =HYPERLINK("../../transcripts_output/POD-00011_2408081740.json", "../../transcripts_output/POD-00011_2408081740.json") =HYPERLINK("../../transcripts_output/POD-00011_2408081740.vtt", "../../transcripts_output/POD-00011_2408081740.vtt") =HYPERLINK("../../transcripts_output/POD-00011_2408081740.txt", "../../transcripts_output/POD-00011_2408081740.txt") =HYPERLINK("../../transcripts_output/POD-00011_2408081740.tsv", "../../transcripts_output/POD-00011_2408081740.tsv")
=HYPERLINK("../../../data/POD-00012_2408081754.MP3", "../../../data/POD-00012_2408081754.MP3") =HYPERLINK("../../transcripts_output/POD-00012_2408081754.srt", "../../transcripts_output/POD-00012_2408081754.srt") =HYPERLINK("../../transcripts_output/POD-00012_2408081754.json", "../../transcripts_output/POD-00012_2408081754.json") =HYPERLINK("../../transcripts_output/POD-00012_2408081754.vtt", "../../transcripts_output/POD-00012_2408081754.vtt") =HYPERLINK("../../transcripts_output/POD-00012_2408081754.txt", "../../transcripts_output/POD-00012_2408081754.txt") =HYPERLINK("../../transcripts_output/POD-00012_2408081754.tsv", "../../transcripts_output/POD-00012_2408081754.tsv")
Подробнее здесь: https://stackoverflow.com/questions/790 ... -and-creat