我可以遍历目录和子目录并将某些文件存储在数组中吗?

时间:2019-10-22 15:12:09

标签: python arrays list loops

我有一个文件夹,其中包含许多子文件夹,以及这些子文件夹中的图像。我有遍历文件夹和子文件夹的代码,一次打印出每个图像的名称。我希望所有这些图像名称都存储在单个数组中。如何获得将每个图像名称附加到同一数组的循环?

到目前为止,我仅在Linux或Matlab上看到过类似的解决方案,而在python上却没有。

files = []
#r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for face_image in f :
        if face_image.endswith("g"): #to get all '.jpg' and all '.png' files
            print(face_image)

当我运行上面的循环时,我会打印出所有〜1000个图像名称。但是,当我尝试在循环外打印(face_image)时,仅打印循环中最终图像的名称。我现在这是因为我没有将每个名称附加到数组,但是不确定如何执行此操作?任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:2)

使用pathlib和递归glob模式:

from pathlib import Path

file_types = ("jpg", "png")
file_paths = []
for file_type in file_types:
    file_paths.extend(Path(".").glob(f"**/*.{file_type}"))

file_names = [file_path.name for file_path in file_paths]

答案 1 :(得分:1)

打印语句后,您可以使用class Complex { private: double _real; double _imag; public: Complex(); Complex(double real, double imag); Complex(const Complex& z); Complex operator+(const Complex& u) const; friend Complex & operator+=(Complex &v, const Complex& u); }; Complex & operator+=(Complex &v, const Complex& u) { v._real += u._real; v._imag += u._imag; return v; } 将面部图像添加到列表中。循环完成后,所有有效的图像名称将在列表中供您使用。

答案 2 :(得分:0)

我不确定这是否是一个合法的问题。您需要将文件追加到列表中。

files = []
#r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for face_image in f :
        if face_image.endswith("g"): #to get all '.jpg' and all '.png' files
            print(face_image)
            files.append(face_image)

答案 3 :(得分:0)

您可以尝试这样的事情:

files = []
for r, d, f in os.walk(path):
    # collect all images
    files += [os.path.join(r, file) for file in f]
    # filter images
    files = [ff for ff in files if ff.endswith('g')]

或更紧凑:

files = []
for r, d, f in os.walk(path):
    # collect all images that end with 'g'
    files += [os.path.join(r, file) for file in f if file.endswith('g')]