在python中创建cd-esque结构的奇怪问题

时间:2014-05-05 20:11:38

标签: python python-2.7 cd chdir

我编写了一个程序,其主要目的是不断询问用户数据文件名,然后绘制这些文件的图形。但是,这些文件存在于各种目录中。我决定能够以标准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部分。)

在宏伟的计划中,这不是什么大问题,因为它只是防止打字错误,但我只是想知道这里发生了什么。谢谢!

2 个答案:

答案 0 :(得分:2)

Python没有做错任何事情,似乎windows只是weird about dots

答案 1 :(得分:0)

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

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