Используя Pandas и Patches, извлеките гиперссылки из файлов Excel (.xlsx) и создайте DataFrame.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Используя Pandas и Patches, извлеките гиперссылки из файлов Excel (.xlsx) и создайте DataFrame.

Сообщение Anonymous »

Проблема:
Я пытаюсь включить код, который позволяет 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Используя Pandas и Patches, извлеките гиперссылки из файлов Excel (.xlsx) и создайте DataFrame.
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Прозрачная форма с непрозрачным фоном с помощью matplotlib.patches
    Anonymous » » в форуме Python
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • Как изменить длину DArrow из matplotlib.patches.FancyBboxPatch?
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Matplotlib.patches.Rectangle создает прямоугольники с неодинаковым размером ширины линии.
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как сделать стиль, скопированный из исходного файла xlsx, таким же, как стиль целевого файла xlsx?
    Гость » » в форуме JAVA
    0 Ответы
    111 Просмотры
    Последнее сообщение Гость

Вернуться в «Python»