如何使用Python打开一个指定目录中的一系列文件(PNG格式)?

4

我在指定的目录中有一个包含多个PNG文件的文件夹,需要随机打开。我似乎无法让random.shuffle在该文件夹上工作。到目前为止,我只能print出它们的内容,但它们也需要被随机排序,以便当它们被打开时顺序是唯一的。

这是我的代码:

import os, sys
from random import shuffle

for root, dirs, files in os.walk("C:\Users\Mickey\Desktop\VisualAngle\sample images"):
    for file in files:
        if file.endswith(".png"):
            print (os.path.join(root, file))

这将返回文件夹中图像的列表。我在考虑是否可以从print中以某种方式随机输出,然后再使用open。到目前为止我一直失败了,有什么想法吗?


你的意思是打开它们吗? - Joran Beasley
4
os.path.join(root, file) 的结果添加到数组中,然后随机访问数组中的条目怎么样? - Barranka
我希望程序能够打开图片以查看。虽然它们被全部打开时随机排序有点没有意义,但它们需要以随机顺序打开。我知道当它们只有一个被打开时随机排序更有意义,但我会将此代码集成到另一个程序中,只有一张图片会被打开。 - Mickey
他们要在画图板中打开吗?还是? - Joran Beasley
是的,我需要对文件路径进行洗牌,然后按照它们被洗牌的顺序打开这些文件。 - Mickey
显示剩余2条评论
2个回答

6

我有一个文件夹在指定目录中,其中包含多个PNG文件。你不需要也不应该使用os.path.walk搜索特定目录,它还可能会添加来自其他子目录的文件,这将给您带来不正确的结果。您可以使用glob获取所有PNG文件的列表,然后进行随机排序:

from random import shuffle
from glob import glob
files = glob(r"C:\Users\Mickey\Desktop\VisualAngle\sample images\*.png")
shuffle(files)

glob函数会返回完整路径。

你也可以使用os.listdir来搜索特定的文件夹:

pth = r"C:\Users\Mickey\Desktop\VisualAngle\sample images"
files = [os.path.join(pth,fle) for fle in os.listdir(pth) if fle.endswith(".png")]
shuffle(files)

打开:

for fle in files:
   with open(fle) as f:
        ...

我喜欢第一种方法,但是之后我该如何打开文件呢?我不能使用 files.open - Mickey
@Mickey,我会进行编辑,这只是一个循环的问题,你实际上想对这些文件做什么? - Padraic Cunningham
文件来自哪里? - Padraic Cunningham
我使用了一种不同的方法来打开文件。我创建了一个空列表,通过使用.append将图像对象系列放入列表中,并定义了一个函数,该函数使用ImageTk.PhotoImage().configure.pack的组合来洗牌图像并在我的窗口中显示它们(我正在使用Tkinter)。 - Mickey
文件已经是一个文件对象,因此您必须附加文件对象而不是文件。 - Padraic Cunningham
显示剩余3条评论

5
您可以先创建png文件名列表,然后进行洗牌:
import os
from random import shuffle

dirname = r'C:\Users\Mickey\Desktop\VisualAngle\sample images'

paths = [
    os.path.join(root, filename)
    for root, dirs, files in os.walk(dirname)
    for filename in files
    if filename.endswith('.png')
]
shuffle(paths)
print paths

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接