【问题标题】:Why isn't os.walk recognising my variable name?为什么 os.walk 不能识别我的变量名?
【发布时间】:2010-12-15 19:45:48
【问题描述】:

我在 TextWrangler 中写了以下内容:

directory = raw_input("See contents of: ") 

for root, dirs, files in os.walk(directory):
   print root, dirs, files

不幸的是,当我在终端中运行它并通过从扩展坞中键入或拖动文件夹来分配目录路径时,没有任何反应。甚至没有错误消息。另一方面,当我在 TextWrangler 中输入以下内容然后在终端中运行该程序时,它工作正常。

for root, dirs, files in os.walk("/Users/paulpatterson/Documents/Python"):
print root, dirs, files

那么我的问题是,为什么 os.walk 不接受变量形式的路径。这本书 我正在使用的建议应该这样做,就像我在尝试解决这个问题时在网上看到的大多数示例一样。

【问题讨论】:

    标签: macos terminal os.walk textwrangler


    【解决方案1】:

    只需在循环之前print directory 即可查看您真正获得的路径。这就是问题所在,并不是os.walk 不接受变量。

    当您将 OSX 下的文件夹放入终端时:

    1. 特殊字符(如空格)被转义以在 shell 中使用
    2. 在目录名后插入一个空格

    两者都会阻止 os.walk 找到路径。你没有收到错误很简单。 os.walk 在这种情况下没有给出错误。它根本不会遍历不存在的路径。

    【讨论】:

    • 谢谢,现在可以使用了。已经完成了“打印目录”,但没有发现最后的空间。
    • +1 OP 说,“现在有效”,我真的需要知道这是什么吗?
    【解决方案2】:

    不幸的是,当我运行它时 终端并分配目录路径 通过键入或拖动文件夹从 码头没有任何反应。

    正如你所说,我已经尝试过,将文件夹拖到我的终端(我在 Linux 上),它会显示用引号括起来的路径。

    删除 raw_input 后的引号应该可以解决您的问题

    import os
    
    directory = raw_input("See contents of: ")
    directory = directory.strip()
    if directory[0] == "'" and directory[-1] == "'":
        directory = directory[1:-1]
    
    print directory
    
    for root, dirs, files in os.walk(directory):
       print root, dirs, files
    

    【讨论】:

    • 引号似乎不是这里的问题。当文件夹拖入终端时,OSX 上不会出现引号。看起来路径末尾添加的空间是问题所在。
    • 好的,很高兴知道它在 Linux 和 OSX 上的行为不同
    猜你喜欢
    • 1970-01-01
    • 2021-09-09
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多