【问题标题】:Download PIL image to CSV将 PIL 图像下载到 CSV
【发布时间】:2021-08-17 16:24:11
【问题描述】:

我正在处理我的第一个网络抓取项目,并正在尝试将我的数据集写入 .csv 文件。将字符串写入 .csv 似乎可以正常工作:

fieldnames = ['fname', 'lname', 'image']

with open('dataset.csv', 'w', encoding='UTF8', newline='') as f:
    newrow = {'fname': 'John', 'lname': 'Doe'}
    writer.writerow(newrow)

但我也有一个图像 url 列表,我想以 .pngs 格式下载到 .csv 文件中。但是,当我尝试执行此操作时,图像将作为字符串写入 .csv,格式为 '<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=120x159 at 0x7FC0A0...>'

这是我为此编写的代码:

response = requests.get('someurl')
image_bytes = io.BytesIO(response.content)
img = PIL.Image.open(image_bytes)
newrow = {'image': img}
writer.writerow(newrow)

我不确定如何将实际的 .pngs 保存到 csv 文件中。

【问题讨论】:

  • 您不会将图像保存为 CSV。图像文件是二进制的。最好的办法是将图像保存为唯一的文件名,并将文件名存储在 CSV 中。
  • 这听起来像是一个 XY 问题 (en.wikipedia.org/wiki/XY_problem)。您能描述一下您想要实现的最初目标吗?
  • CSV 文件是文本文件,因此您无法将图像存储在一个文件中,除非您先将其转换为某种文本格式,例如 base64。
  • 您也可以将像素数组转换为文本并保存在 csv 中,但效率非常低。
  • 有关将像素(低效)转换为文本的示例,请参阅my answer 到问题How to convert a grayscale image into a list of pixel values? 它适用于灰度图像,但相同的基本思想适用于彩色图像——不同之处在于每个像素将由多个值组成,例如 RGB 各一个。

标签: python csv python-imaging-library


【解决方案1】:

逗号分隔值 (CSV) 文件是带分隔符的 text file所以二进制数据不能存储在 CSV 中。它们是一些将二进制数据编码为文本的方法。

我认为standart library Base64 是 CSV 的不错选择。

Tim Roberts 的回答中写了另一种方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多