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

时间:2019-08-14 09:22:20

标签: python-3.x pandas loops os.walk

我正在尝试获取列表中一组文件的路径。文件位于不同的子文件夹中。我正在使用os.walk和循环来遍历不同的文件,并将完整的路径附加到新的数据框以在不同的程序中使用。但是代码中有一个错误,只能使它运行循环的第一个周期。

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

我在python3.6上使用MacOS10.14.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个条目,仅包含第一个文件的路径。

如果我在{1处print(fasta),我会从数据框中获得所有3个文件名。

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

有人能指出循环为什么不继续吗?

1 个答案:

答案 0 :(得分:1)

我猜这是因为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))