【发布时间】: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