【问题标题】:Odd issue creating cd-esque structure in python在 python 中创建 cd-esque 结构的奇怪问题
【发布时间】:2014-05-05 20:11:38
【问题描述】:

我编写了一个程序,其主要目的是不断地向用户询问数据文件名,然后绘制这些文件的图形。但是,根据设计,这些文件存在于各种目录中。我认为能够以标准的cd 样式导航会很好,这样用户就可以轻松地进入所述目录并选择他/她想要的任何文件。

我是 python 新手(现在正在使用 2.7),所以也许我实现的很糟糕,但下面是我现在的代码:

import os

...

userinput = raw_input('What would you like to do: ').lower()
if userinput.startswith('cd '):
    try:
        newdir = userinput.split('cd ')[1]
        os.chdir(newdir)
        print(os.getcwd()+'\n')
    except:
        print('Not a valid directory.\n')

到目前为止,这实际上对我的测试用例很有效(在 Windows 环境中运行,无论好坏),唯一的例外是用户输入类似于cd ...。只要有除两个以外的任何数量的句点,就不会引发错误(我在没有 try/except 的情况下完成了此操作),并且程序保留在当前目录中(它打印出它已经存在的位置,而不是继续到声明的except 部分)。

总的来说,这没什么大不了的,因为它只是为了防止出现拼写错误,但我只是想知道这里发生了什么。谢谢!

【问题讨论】:

  • Windows 可能会以某种特殊的方式解释文件名中的.(请记住,它是文件名/扩展名分隔符)。在 Linux 上,我收到了预期的错误消息。尝试os.path.splitext('...') 获得线索。

标签: python python-2.7 cd chdir


【解决方案1】:

Python 并没有做错什么,似乎 windows 只是 weird about dots

【讨论】:

  • 为什么要这样? isdir 是否应该将路径名与 getcwd 区别对待? (Windows 肯定没那么疯狂……)
  • @lars - 显然是这样。
【解决方案2】:

您可以使用正则表达式将两个以上的点转换为 ../ 的集合。比如:

userinput = re.sub('\.\.\.+', lambda x: os.path.join(*['..']*(len(x.group(0))-1)), userinput)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2010-10-12
    • 2012-01-16
    • 1970-01-01
    相关资源
    最近更新 更多