小编ran*_*mon的帖子

无法在Windows上使用Python查找具有长名称的文件

我需要在Windows中浏览具有长文件名的文件夹.

我尝试使用os.listdir(),但它崩溃了很长的路径名,这很糟糕.

我试过使用os.walk(),但它忽略了长于~256的路径名,这更糟糕.

我尝试了这里描述的魔术解决方法,但它只适用于映射驱动器,而不适用于UNC路径名.

下面是一个使用短路径名的示例,它显示UNC路径名不适用于魔术词诀.

>>> os.listdir('c:\\drivers')
['nusb3hub.cat', 'nusb3hub.inf', 'nusb3hub.sys', 'nusb3xhc.cat', 'nusb3xhc.inf', 'nusb3xhc.sys']
>>> os.listdir('\\\\Uni-hq-srv6\\router')
['2009-04-0210', '2010-11-0909', ... ]

>>> mw=u'\\\\?\\'
>>> os.listdir(mw+'c:\\drivers')
[u'nusb3hub.cat', u'nusb3hub.inf', u'nusb3hub.sys', u'nusb3xhc.cat', u'nusb3xhc.inf', u'nusb3xhc.sys']
>>> os.listdir(mw+'\\\\Uni-hq-srv6\\router')

Traceback (most recent call last):
  File "<pyshell#160>", line 1, in <module>
    os.listdir(mw+'\\\\Uni-hq-srv6\\router')
WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect: u'\\\\?\\\\\\Uni-hq-srv6\\router\\*.*'
Run Code Online (Sandbox Code Playgroud)

关于如何处理长路径名或使用unicode UNC路径名的任何想法?

编辑:

根据以下评论的建议,我创建了一些测试函数来比较Python 2.7和3.3,并添加了测试glob.globos.listdir之后的测试os.chdir.

os.chdir没有像预期的那样有帮助(见本评论). …

python windows filepath

30
推荐指数
2
解决办法
6635
查看次数

如何在grails控制器中使用路径变量?

我一直在尝试在grails控制器中使用路径变量,但我无法实现它.背后的意图是验证提交给我需要强制的URL的参数.我无法通过RequestParam实现它,所以我切换到PathVariable,以便提交没有所需param的url应该由grails控制器本身过滤掉,而不是我添加if/else检查有效性.

所以,我可以说明如下:我的网址如下: -

'<appcontext>/<controller>/<action>?<paramName>=<something>'
Run Code Online (Sandbox Code Playgroud)

现在,为了使'paramName'成为强制性的,我没有在Grails中找到任何方法(Spring MVC提供了@RequestParam注释,它可以使我''required'为真).

我认为另一种选择是使用路径变量,以便'paramName'可以包含在URL本身中.所以我试着跟随:

'<appcontext>/<controller>/<action>/$paramName'
Run Code Online (Sandbox Code Playgroud)

为了验证上面的URL,我编写了特定的映射,但有些映射不起作用..

以下是我写的具体映射: -

"/<controllerName>/<action>/$paramName" {
            controller:<controller to take request>
            action:<action to do task>
            constraints {
                paramName(nullable: false,empty:false, blank: false)
            }
        }
Run Code Online (Sandbox Code Playgroud)

我尝试在控制器中使用类似@PathVariable和@RequestParam的弹簧注释,如下所示: -

 def action(@PathVariable("paramName") String param){
        //code goes here
    }
Run Code Online (Sandbox Code Playgroud)

parameters grails grails-controller

4
推荐指数
1
解决办法
6643
查看次数