我需要在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.glob和os.listdir之后的测试os.chdir.
os.chdir没有像预期的那样有帮助(见本评论). …
我一直在尝试在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)