Как записать файл в CSV-файл со строкой в одном столбце и байтов в другом столбце

1

Я написал программу, которая преобразует.jpg изображение в base64. Теперь я хочу записать их в файл csv. Чтобы один столбец имел имя файла (строка), другой столбец имеет преобразованное изображение (байты). Как мне это достичь. До сих пор я писал ниже коды.

from PIL import Image
import os
import base64
import csv

def main():
    array=[]
    pic_name=[]
    #opens file in listed directory
    for f in os.listdir('./jpg_Images'):
        if f.endswith('.jpg'):
            #making a list of a filename
            pic_name.append(f)
            #joining the path
            xpath = os.path.join ('./jpg_Images',f)
            #open .jpg file in Binary mode
            image = open(xpath, 'rb')
            #open binary file in read mode
            image_read = image.read()
            #encode the image
            image_64_encode = base64.encodebytes(image_read)
            #making the list of encoded image
            array.append(image_64_encode)

    with open('convert.csv', 'w') as f:
        writer = csv.writer(f)
        writer.writerows(zip(array, pic_name))
    f.close()


if __name__ == '__main__':
    main()
  • 0
    Привет Гаурав, добро пожаловать в Stack Overflow. Обратите внимание, что когда вы открываете файл с помощью open, он обеспечивает закрытие файла после его области. Так что вам не нужен f.close ()
  • 0
    Кодировка base64 превращает байты в строку, поэтому вы не смешиваете два типа.
Показать ещё 4 комментария
Теги:

1 ответ

1
Лучший ответ

К счастью, закодированные байтовые строки base64 могут быть декодированы в unicode без потери точности. base64 декодирует для печатных (и неэкранированных) символов из диапазона ASCI. Просто измените строку:

array.append(image_64_encode)

чтобы:

array.append(image_64_encode.decode())
  • 0
    Спасибо за ваш комментарий. Я попытался изменить его на то, что вы предложили. И я пытаюсь открыть файл CSV в Excel. Данные в файле выглядят испорченными. Это потому, что закодированные байты имеют два больших размера, так что Excel пытается их сжать?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню