os.walk中"root"变量返回的完整路径名

1 投票
1 回答
630 浏览
提问于 2025-04-18 14:08

我正在使用os.walk这个工具来遍历一个文件夹树,检查一些输入文件,然后如果找到了合适的输入,就运行一个程序。我发现我遇到了一些问题,因为在循环中,os.walk对根目录变量的处理方式让我感到困惑:

for root, dirs, files in os.walk('.'):# I use '.' because I want the walk to 
                                      # start where I run the script. And it 
                                      # will/can change
    if "input.file" in files:
         infile = os.path.join(root,"input.file")
         subprocess.check_output("myprog input.file", Shell=True)
                                      # if an input file is found, store the path to it 
                                      # and run the program

这个问题让我很头疼,因为输入文件的字符串看起来是这样的:

  ./path/to/input.file 

而程序需要它看起来像这样,才能找到文件:

 /home/start/of/walk/path/to/input.file

我想知道有没有更好的方法,或者说用os.walk的不同方式,这样我可以随意选择起始目录,但仍然能够使用它找到的任何文件的完整路径。谢谢!

我使用的程序是我自己用C++写的,我想我也可以修改它。不过在这个问题中,我并不是在询问如何修改,只是想澄清一下,这个问题是关于Python的os.walk和相关主题的,所以这里没有我的C++代码示例。

1 个回答

2

与其使用.,不如通过os.path.abspath(".")把它转换成绝对路径。这样在你开始之前,就可以把你当前的路径变成一个绝对路径。

撰写回答