2011-03-26 17 views
9

Windows 7, Python 2.6.6, 2.7pitón: os.path.isdir return false para el directorio con el punto en el extremo

Crear directorio 'c: \ 1 \ test.'

Trate de comprobar si es dir o archivo, pero no es ni:

>>> os.listdir('c:/1') 
['test.'] 
>>> os.path.isdir('c:/1') 
True 
>>> os.path.exists('c:/1/test.') 
False 
>>> os.path.isdir('c:/1/test.') 
False 
>>> os.path.isfile('c:/1/test.') 
False 

Por qué directorio con. al final no se reconoce como entrada del sistema de archivos en absoluto? Pero puedo obtenerlo de os.listdir.

+0

No se puede reproducir. ¿Cómo se creó este directorio? Mi Windows 7 (32 bits) elimina el punto, no importa si uso 'mkdir' o el explorador, siempre termino con' test'. 'os.listdir' confirma esto (' ['test'] '). 'os.isdir' devuelve' True' tanto para 'test' (como para' test', presumiblemente porque el punto también está eliminado) y 'os.isfile' devuelve' False' como se esperaba. – delnan

+0

Lo creo con Far. También se puede crear con cygwin/mkdir. –

+0

Windows tiene problemas con tales nombres de archivos en general. Por ejemplo, no puede navegar en el directorio o eliminarlo en el Explorador. – interjay

Respuesta

5

Como se dijo en los comentarios, en Windows, los nombres de archivo que terminan con un punto, comienzan/terminan con espacios, son "aux", etc. etc. etc. - no se puede acceder normalmente desde el explorador o desde la mayoría de los programas idiomas.

Si desea acceder a directorios como "prueba". de pitón (u otro) de código, se puede prefijar la ruta con \\?\, por ejemplo:

>>> os.path.isdir(r"\\?\c:\1\test.") 
True 

Tenga en cuenta que ".." y "". no funcionará como de costumbre al usar las rutas \\?\ - Windows intentará acceder a un archivo o directorio real con ese nombre.

Cuestiones relacionadas