Извлечь изображения из файла Excel с помощью python - PullRequest
2 голосов
/ 27 мая 2020

У меня есть лист Excel со 100 строками. Каждый из них имеет различную информацию, включая идентификатор и ячейку, содержащую фотографию.

Я использую pandas для загрузки данных в словари:

import pandas as pd

df = pd.read_excel('myfile.xlsx')

data = []

for index,row in df.iterrows():
    data.append({
        'id':row['id'],
        'field2':row['field2'],
        'field3':row['field3']
    })

Для столбца изображений я хотите извлечь каждое изображение, назовите его идентификатором строки (image_row ['id']. jpg) и поместите в папку. Затем я хочу сохранить путь к изображению, как показано ниже:

for index,row in df.iterrows():
        data.append({
            'id':row['id'],
            'field2':row['field2'],
            'field3':row['field3'],
            'image':'path/image_'+row['id']+'.jpg'
        })

Я ищу способ сделать это или другой способ, если лучше. У вас есть идеи?

Я на Linux, поэтому я не могу использовать этот метод с pywin32 .

Большое спасибо

- РЕДАКТИРОВАТЬ

Вы можете найти здесь образец листа, который я использую

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Я нашел решение, используя openpyxl и openpyxl-image-loader modules

# installing the modules
pip3 install openpyxl
pip3 install openpyxl-image-loader

Затем в скрипте:

#Importing the modules
import openpyxl
from openpyxl_image_loader import SheetImageLoader

#loading the Excel File and the sheet
pxl_doc = openpyxl.load_workbook('myfile.xlsx')
sheet = pxl_doc['Sheet_name']

#calling the image_loader
image_loader = SheetImageLoader(sheet)

#get the image (put the cell you need instead of 'A1')
image = image_loader.get('A1')

#showing the image
image.show()

#saving the image
image.save('my_path/image_name.jpg')

В конце концов, я могу сохранить путь и имя изображения в своих словарях в al oop для каждой строки

1 голос
/ 27 мая 2020

Могут быть гораздо лучшие решения, но я подумал, что поделюсь тем, что знаю, если это будет достаточно.


Файл Excel .xlsx на самом деле является zip-файлом. Таким образом, вы можете прочитать его с помощью 7z и, вероятно, также с помощью Python Zipfile. Просто демонстрация в Терминале:

# List contents
7z l a.xlsx

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,12 CPUs x64)

Scanning the drive for archives:
1 file, 596240 bytes (583 KiB)

Listing archive: a.xlsx

--
Path = a.xlsx
Type = zip
Physical Size = 596240

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2020-05-27 02:36:54 .....         2371          563  xl/drawings/drawing1.xml
2020-05-27 02:36:54 .....          561          198  xl/drawings/_rels/drawing1.xml.rels
2020-05-27 02:36:54 .....         1781          565  xl/worksheets/sheet1.xml
2020-05-27 02:36:54 .....          298          179  xl/worksheets/_rels/sheet1.xml.rels
2020-05-27 02:36:54 .....         3757          808  xl/theme/theme1.xml
2020-05-27 02:36:54 .....          427          204  xl/sharedStrings.xml
2020-05-27 02:36:54 .....         2523          613  xl/styles.xml
2020-05-27 02:36:54 .....          809          330  xl/workbook.xml
2020-05-27 02:36:54 .....          697          234  xl/_rels/workbook.xml.rels
2020-05-27 02:36:54 .....          296          178  _rels/.rels
2020-05-27 02:36:54 .....       156683       156657  xl/media/image2.png
2020-05-27 02:36:54 .....        46848        46853  xl/media/image1.png
2020-05-27 02:36:54 .....       386512       386632  xl/media/image3.png
2020-05-27 02:36:54 .....         1099          320  [Content_Types].xml
------------------- ----- ------------ ------------  ------------------------
2020-05-27 02:36:54             604662       594334  14 files

Затем вы можете извлечь файлы и просмотреть изображения с помощью:

7z x a.xlsx

Другой вариант - сохранить файл Excel как PDF, вы можете запустить pdfimages из пакета Poppler и извлечь изображения:

pdfimages -png YourSpreadsheet.pdf extracted

Пример вывода

-rw-r--r--@ 1 mark  staff   92973 27 May 10:57 extracted-000.png
-rw-r--r--@ 1 mark  staff   28074 27 May 10:57 extracted-001.png
-rw-r--r--@ 1 mark  staff     189 27 May 10:57 extracted-002.png
-rw-r--r--@ 1 mark  staff  244898 27 May 10:57 extracted-003.png
...