Python:使用枕头将EXIF数据写入文件时出错

Python:使用枕头将EXIF数据写入文件时出错,python,exif,pillow,Python,Exif,Pillow,我正在尝试使用Pillow和Python3将EXIF数据写入jpg文件。我不明白为什么下面的代码失败了。任何帮助都将不胜感激 fileName是jpg文件的有效完整路径和文件名。我正在从一个QListWidget访问该名称,它将照片文件名及其图像显示为图标。总体思路是迭代QListWidget中的文件列表,并更新每个文件的EXIF数据 while S < self.lstPhotos.count(): fileName = str(self.lblPath.text

我正在尝试使用Pillow和Python3将EXIF数据写入jpg文件。我不明白为什么下面的代码失败了。任何帮助都将不胜感激

fileName
是jpg文件的有效完整路径和文件名。我正在从一个QListWidget访问该名称,它将照片文件名及其图像显示为图标。总体思路是迭代QListWidget中的文件列表,并更新每个文件的EXIF数据

    while S < self.lstPhotos.count():
        fileName = str(self.lblPath.text() + "/" + self.lstPhotos.item(S).text())
        im = Image.open(fileName)
        exifdata = im._getexif()
        exifdata[0x010f] = "Canon"
        exifdata[0x0110] = "EOS 630"
        im.save(fileName, exif=exifdata)
        S += 1
我猜Pillow不需要字典形式的EXIF数据,但这是Pillow本身从文件中检索的格式

我无法在网上找到有关EXIF数据应采用何种格式的文档。我假设它的格式应该与使用
\u getexif()
调用生成的格式相同


我正在使用Python3。我用的是最新版本的枕头。枕头安装在.local/lib/python2.7/site-packages/PIL/上,它的其他功能似乎在Python 3下工作

TypeError:参数13必须是字符串或只读缓冲区,而不是dict
-似乎您必须创建一个包含所有数据的字符串。如果您使用
Python2.7
,为什么在模块文件夹中有
PIL
表示它是内部函数,不应由用户使用-因此不要期望
im.save
将使用与
\u getexif()
返回相同的格式。感谢您的建议。有人知道save调用中EXIF数据的正确格式吗?(另外,PIL本身安装在2.7目录中。我可以将其移动到Python3目录中吗,还是需要重新安装?)每个Python都使用自己版本的模块,并将其保存在自己的文件夹中。您应该有
pip
pip2
)和
pip3
,才能安装不同版本的模块。
TypeError:参数13必须是字符串或只读缓冲区,不是dict
-似乎您必须创建一个包含所有数据的字符串。如果您使用
Python2.7
,为什么在文件夹中为
Python2.7
的模块设置了
PIL
表示它是内部函数,不应由用户使用-因此不要期望
im.save
将使用与
\u getexif()
返回相同的格式。感谢您的建议。有人知道save调用中EXIF数据的正确格式吗?(另外,PIL本身安装在2.7目录中。我可以将其移动到Python3目录中吗,还是需要重新安装?)每个Python都使用自己版本的模块,并将其保存在自己的文件夹中。您应该有
pip
pip2
)和
pip3
来安装不同版本的模块。
Traceback (most recent call last):
  File "/home/richard/Dropbox/Documents/Personal/Python/PhotOrg/src/photoOrgMain.py", line 372, in WriteEXIFData
im.save(fileName, exif=exifdata)
File "/home/richard/.local/lib/python2.7/site-packages/PIL/Image.py", line 1698, in save
save_handler(self, fp, filename)
File "/home/richard/.local/lib/python2.7/site-packages/PIL/JpegImagePlugin.py", line 725, in _save
ImageFile._save(im, fp, [("jpeg", (0, 0)+im.size, 0, rawmode)], bufsize)
File "/home/richard/.local/lib/python2.7/site-packages/PIL/ImageFile.py", line 490, in _save
e = Image._getencoder(im.mode, e, a, im.encoderconfig)
File "/home/richard/.local/lib/python2.7/site-packages/PIL/Image.py", line 439, in _getencoder
return encoder(mode, *args + extra)
TypeError: argument 13 must be string or read-only buffer, not dict