【问题标题】:Loop using os.walk only runs the first cycle使用 os.walk 的循环只运行第一个循环
【发布时间】:2019-08-14 09:22:20
【问题描述】:

我正在尝试获取列表中的一组文件的路径。这些文件位于不同的子文件夹中。我正在使用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) 我会从我的数据框中获取所有 3 个文件名。

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

有人能指出循环不继续的原因吗?

【问题讨论】:

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


    【解决方案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))
    

    【讨论】:

    • 这确实解决了问题。我没有意识到我错误地使用了 dir 。感谢您指出这一点!
    猜你喜欢
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 2014-12-29
    • 2018-05-02
    • 1970-01-01
    • 2018-05-14
    相关资源
    最近更新 更多