2012-09-25 16 views
7

Tratando de familiarizarme con la biblioteca estándar de python y de hacer algunas modificaciones con ella en mi máquina con Windows. Uso de Python 2.7 Tengo el siguiente pequeño script que intenta buscar en un directorio y cambiar el nombre de todos los archivos después de quitar los números del nombre del archivo. Me estoy poniendo un TypeError que dice "debe ser codificado cadena sin bytes NULL, no str"Python TypeError: debe ser una cadena codificada sin bytes NULL, no str

se dice en voz alta las líneas 5 y 18, indican a continuación, donde im usando os.path.exists.

¡Cualquier ayuda sería muy apreciada!

import os, re, string, glob 

    path = os.path.normpath('C:\Users\me\Photo Projects\Project Name\Project Photos\Modified\0-PyTest') 

ln5:if os.path.exists(path): 
     print "path exists at " + path 
     for file in glob.glob(os.path.join(path, '*.jpg')): 
      new_path = os.path.join(os.path.dirname(file), re.sub('\d', '', os.path.basename(file))) 
line18:  if not os.path.exists(new_path): 
       os.rename(file, new_path) 

Respuesta

1

resulta ser el único problema de barra diagonal inversa. pensé que os.path.normpath formatearía la ruta según lo requerido por el sistema operativo.

10

"... Fotos \ Modificado \ 0-PYtest"

Su toman la \ 0 como un carácter nulo. Tienes que escapar utilizando \\\, o simplemente poner r antes de la cadena para que sea cruda:

r'C:\Users\me\Photo Projects\Project Name\Project Photos\Modified\0-PyTest' 
0

Si le está dando una URL camino justo antes de que añadir r:

(r'E: \ Images \ 1.png ')

+0

Hola, bienvenido a SO! Esta pregunta es muy antigua y ya se ha respondido con una respuesta muy similar, por lo que no es necesario volver a publicarla. Sin duda, habrá otras personas con nuevas preguntas que necesitan su ayuda. – Tom

Cuestiones relacionadas