使用 os.walk 的循环仅运行第一个循环

Loop using os.walk only runs the first cycle

我正在尝试获取列表中的一组文件的路径。这些文件位于不同的子文件夹中。我正在使用 os.walk 并通过不同的文件循环到 运行 并将完整路径附加到新的数据帧以在不同的程序中使用。但是代码中有一个错误,只使它 运行 成为循环的第一个循环。

代码基于此线程:Need the path for particular files using os.walk()

我在 MacOS10.14.6 上使用 python3.6 我不确定这是否重要,但目录位于外部硬盘驱动器上。

    import pandas as pd
    import os

    dir = "/Volumes/dir1/dir2"
    fastafiles = ["file1", "file2", "file3"]
    fastafiles_df = pd.DataFrame(fastafiles)

    fasta_paths = []

    for fasta in fastafiles_df[0]:
        #1
        for dir, subdirs, files in os.walk(dir):
            for file in files:
                if file.endswith(fasta):
                    #2
                    fasta_paths.append(os.path.join(dir, file))
                    #3

运行 代码将在 fasta_paths 中给我 1 个条目,只有第一个文件的路径。

如果我 print(fasta) 在 #1 我从我的数据框中得到所有 3 个文件名。

如果我在#2 print(file) 我只会得到 1 个文件名 如果我 print fasta_paths 在 #3 我会得到第一个文件的路径。

谁能指出循环不继续的原因。

我猜这个错误是由于 dir 在解压缩和遍历 os.walk 生成器对象时用于表示根目录和参数导致的名称空间崩溃。 不过,请记住 dir 是 Python 标准库的名称,尽量不要使用此类变量名。

你能试试改个变量名吗?

import pandas as pd
import os

root_dir = "/Volumes/dir1/dir2"
fastafiles = ["file1", "file2", "file3"]
fastafiles_df = pd.DataFrame(fastafiles)

fasta_paths = []

for fasta in fastafiles_df[0]:
    #1
    for curr_dir, subdirs, files in os.walk(root_dir):
        for file in files:
            if file.endswith(fasta):
                #2
                fasta_paths.append(os.path.join(curr_dir, file))