Python 使用imageio制作gif时的图像顺序

Python 使用imageio制作gif时的图像顺序,python,png,animated-gif,python-imageio,Python,Png,Animated Gif,Python Imageio,我正在使用生成的.png文件制作gif byimageio模块。尽管.png文件是按数字顺序排序的,但生成的.gif动画并不遵循此顺序。原因是什么? 以下是我目前的代码: png_dir='png' images=[] for file_name in os.listdir(png_dir): if file_name.endswith('.png'): file_path = os.path.join(png_dir, file_name) images

我正在使用生成的.png文件制作gif by
imageio
模块。尽管.png文件是按数字顺序排序的,但生成的.gif动画并不遵循此顺序。原因是什么? 以下是我目前的代码:

png_dir='png'
images=[]
for file_name in os.listdir(png_dir):
    if file_name.endswith('.png'):
        file_path = os.path.join(png_dir, file_name)
        images.append(imageio.imread(file_path))
imageio.mimsave('movie.gif', images, duration=1)
.png文件类似于
file_01.png,file_02.png。。。文件_099.png

为什么gif的生成顺序与.png文件不同

提前感谢您的帮助

您假设文件是有序的,但是
os.listdir
的状态(重点是我的):

os.listdir(路径='.')

返回一个列表,其中包含路径给定的目录中的条目名称该列表按任意顺序排列,不包括特殊条目“.”和“..”,即使它们存在于目录中

您可以自己对返回的列表进行排序:

for file_name in sorted(os.listdir(png_dir)):
注意:Python没有内置的自然排序。如果这就是您要查找的内容,您应该检查此问题的答案:

您假设文件已排序,但os.listdir的状态(强调我的状态):

os.listdir(路径='.')

返回一个列表,其中包含路径给定的目录中的条目名称该列表按任意顺序排列,不包括特殊条目“.”和“..”,即使它们存在于目录中

您可以自己对返回的列表进行排序:

for file_name in sorted(os.listdir(png_dir)):

注意:Python没有内置的自然排序。如果这就是您要查找的内容,那么您应该检查此问题的答案:

在进行零填充时,您需要有相同的位数才能使其正常工作。您应该使用
文件\u 001.png
文件\u 002.png
<代码>文件\u 010.png,
文件\u 011.png
file_099.png
我期待着这样的评论。实际上,这些.png文件是通过循环自动创建的,所以我无法控制它们的位数。@Mike Scotty的下一条评论显示了一个更好的解决方案,但这是不正确的-在制定文件名时,您确实可以控制数字的格式-例如,您可以对格式使用
%04d
。谢谢!事实上,随着png文件数量的增加,我将编号从序列号改为日期。零填充时需要有相同的位数才能工作。您应该使用
文件\u 001.png
文件\u 002.png
<代码>文件\u 010.png,
文件\u 011.png
file_099.png
我期待着这样的评论。实际上,这些.png文件是通过循环自动创建的,所以我无法控制它们的位数。@Mike Scotty的下一条评论显示了一个更好的解决方案,但这是不正确的-在制定文件名时,您确实可以控制数字的格式-例如,您可以对格式使用
%04d
。谢谢!事实上,随着png文件数量的增加,我将编号从序列号改为日期。谢谢你的回答。这正是我需要的!谢谢你的回答。这正是我需要的!