我正在尝试获取列表中一组文件的路径。文件位于不同的子文件夹中。我正在使用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
会得到第一个文件的路径。
有人能指出循环为什么不继续吗?
答案 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))