我正在使用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
这给了我一个问题,因为infile字符串看起来像这样
./path/to/input.file
当程序需要看起来像这样才能找到它
/home/start/of/walk/path/to/input.file
我想知道是否有更好的方法/使用os.walk的不同方式,这样我可以任意保留起始目录,但仍然可以使用它找到的任何文件的完整路径。谢谢
我使用的程序是用c ++编写的,我想我也可以修改它。但是我不是在这个问题中询问如何做到这一点只是为了澄清这个问题是关于python的os.walk和相关主题,这就是为什么我的c ++代码没有这里的例子。
答案 0 :(得分:2)
不使用.
,而是使用os.path.abspath(".")
将其转换为绝对路径。这将在您开始之前将当前路径转换为绝对路径。