【问题标题】:Converting all files (.jpg to .png) from a directory in Python从 Python 中的目录转换所有文件(.jpg 到 .png)
【发布时间】:2019-07-26 10:16:38
【问题描述】:

我正在尝试将目录中的所有文件从 .jpg 转换为 .png。名称应该保持不变,只是格式会改变。

我一直在做一些研究并得出这个结论:

from PIL import Image
import os

directory = r'D:\PATH'

for filename in os.listdir(directory):
    if filename.endswith(".jpg"):
        im = Image.open(filename)
        im.save('img11.png')
        print(os.path.join(directory, filename))
        continue
    else:
        continue

我希望循环遍历我所有的 .jpg 文件并将它们转换为 .png 文件。到目前为止,我只使用 1 个名称:'img11.png',我还没有成功构建能够编写适当名称的东西。

print(os.path.join(directory, filename)) 有效,它打印我所有的文件,但关于转换部分,它只适用于 1 个文件。

你们有什么想法可以帮助我完成这个过程吗?

【问题讨论】:

  • 对您来说,将扩展名从 .jpg 更改为 .png 是一个很好的转换吗?
  • 但他不会重命名文件@Wonka Image 包会转换成另一种格式。所以不确定是谁给的-1
  • @Wonka 这是一个机器学习项目,我需要在 .jpg / .png / .pdf 文件上训练一个算法。由于我有大量的 .jpg,我需要拆分我的数据集以获得均匀分布的数据集
  • 我不是 python 专家,但由于您保存每个同名文件,它不会遍历所有文件并每次都覆盖它。尝试在结尾处使用一个索引来保存它的速率

标签: python python-3.x jupyter-notebook python-imaging-library


【解决方案1】:

您可以将打开的图像转换为 RGB,然后您可以将其保存为任何格式。 你可以试试下面的代码:

from PIL import Image
import os

directory = r'D:\PATH'
c=1
for filename in os.listdir(directory):
    if filename.endswith(".jpg"):
        im = Image.open(filename)
        name='img'+str(c)+'.png'
        rgb_im = im.convert('RGB')
        rgb_im.save(name)
        c+=1
        print(os.path.join(directory, filename))
        continue
    else:
        continue

【讨论】:

    【解决方案2】:

    您明确地将每个文件保存为img11.png。 您应该获取jpg 文件的名称,然后使用它来命名并保存png 文件。

    name = filename[:-4]
    im.save(name + '.png')
    

    【讨论】:

    • 它完美地工作,无论是转换成 .png 和 .pdf。谢谢@Arienrhod
    • 有效,但从长远来看不是一个好的解决方案。这里我们假设文件的扩展名只有3个字符(长度),这可能不是真的(例如.jpeg.tiff 等)。因此,我建议您使用os.path.splittext()[0] 之类的东西来获取真实的文件名,而不管扩展名的长度如何。
    • 或最后用 '.' 分割[1] 也可以工作
    【解决方案3】:

    我会使用如下所示的 os.rename() 函数。

    import os 
    directory = r'D:\PATH' 
    for filename in os.listdir(directory):
        prefix = filename.split(".jpg")[0]
        os.rename(filename, prefix+".png")
    

    如果这是您想要的,请告诉我。在应用到预期文件夹之前,尝试在测试文件夹中包含一些复制图像的代码。一切顺利。

    【讨论】:

    • 感谢@Amit 它可以转换成 .png 文件。但奇怪的是,它不会转换为 .pdf 文件。它说文件类型不受支持或损坏。你知道为什么吗?
    • 道歉。我以某种方式阅读了您关于重命名而不是转换的请求。我一次做两件事。诚挚的道歉。我以前的代码只会重命名。由于仅更改了扩展,因此很可能会破坏可用性。我现在将发布另一个答案。它基本上是您程序中的一个非常小的编辑。再次抱歉。
    • @Grégoire de Kermel。既然您已经接受了我的解决方案,我会要求您查看我的最后一篇文章(在页面底部)。如果您无法取消选择我的答案并在此页面中选择更好的答案,请告诉我(如果页面底部的答案有效)。如果是这样,我将交换两个答案。否则,将来有人看到这篇文章(如果赶时间的话)可能会使用错误的解决方案并遭受痛苦。请帮助我更正帖子,否则请选择其他答案作为解决方案。这个想法不是看起来很聪明,而是防止将来误导某人。谢谢
    【解决方案4】:
    from PIL import Image 
    import os 
    directory = r'D:\PATH' 
    for filename in os.listdir(directory): 
        if filename.endswith(".jpg"): 
            prefix = filename.split(".jpg")[0]
            im = Image.open(filename)
            im.save(prefix+'.png')  
        else: 
            continue
    

    请试试这个并告诉我。

    【讨论】:

    • 应该是这样 from PIL import Image import os in next line directory = r'D:\PATH' //下一行
    猜你喜欢
    • 2023-01-29
    • 1970-01-01
    • 2020-09-04
    • 2020-01-28
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2012-12-15
    相关资源
    最近更新 更多