2011-08-23 8 views
5

Tengo un código que agrega la palabra "_manual" al final de una carga de nombres de archivo ... Necesito cambiar la secuencia de comandos para que elimine las dos últimas letras del nombre de archivo (ES) y luego lo reemplaza por _ES_Manual por ejemplo: AC-5400ES.txt -> AC-5400_ES_manual.txtReemplazar caracteres de nombre de archivo con python

¿Cómo incorporaría esa función a este código?

folder = r"C:/Documents and Settings/DuffA/Bureaublad/test" 
import os # glob is unnecessary 
for root, dirs, filenames in os.walk(folder): 
    for filename in filenames: 
     fullpath = os.path.join(root, filename) 
     filename_split = os.path.splitext(fullpath) # filename and extensionname (extension in [1]) 
     filename_zero, fileext = filename_split 
     print fullpath, filename_zero + "_manual" + fileext 
     os.rename(fullpath, filename_zero + "_manual" + fileext) 
+1

¿Quieres decir EN o ES? – carlpett

+0

¿cuál es el problema con el guión existente ??? – rocksportrocker

+0

quise decir ES lo siento! No hay ningún problema con el script, pero necesito incorporar el reemplazo del ES actualmente en el nombre del archivo. lo siento si eso es confuso! –

Respuesta

10

Prueba esto:

import os 
pathiter = (os.path.join(root, filename) 
    for root, _, filenames in os.walk(folder) 
    for filename in filenames 
) 
for path in pathiter: 
    newname = path.replace('ES.txt', '_ES_manual.txt') 
    if newname != path: 
     os.rename(path,newname) 
+0

esto también funciona como un encanto! - ¿Cómo selecciono una respuesta si ambas funcionan? –

+0

¡aceptaré este porque se dirige específicamente a archivos ES! ¡gracias! –

+0

@Alice Duff El código de _hughdbrown_ se aplica solo a los nombres de archivo que terminan con 'ES.txt'. Es correcto si solo desea cambiar estos nombres de archivo. Mi código es más genérico, cambia todos los nombres de los archivos en sus 2 últimas letras antes de la extensión.Puede suceder que no sea lo que quieres, por lo que podrías anunciar _hughdbrown_. Pero también puede considerar agregar una condición en mi código para seleccionar los nombres de archivo para cambiar, por lo tanto, mi código es más general y adaptable. Tienes que considerar y elegir. – eyquem

1

que podría hacer:

for filename in filenames: 
    print(filename) #should display AC-5400ES.txt 
    filename = filename.replace("ES.txt","ES_manual.txt") 
    print(filename) #should display AC-5400ES_manual.txt 
    fullpath = os.path.join(root, filename) 
    os.rename(fullpath, filename) 
+0

Pero necesito mantener la parte inicial del nombre de archivo "AC-5400ES" - ¿Esto funcionaría para eso? –

+0

@Alice Duff: sí, esta instrucción tomará la cadena de nombre de archivo y reemplazará cada aparición de "ES.txt" y la reemplazará por "ES_manual.txt". Esta es la forma más básica de manejar lo que describes. Si necesita algo más sofisticado, díganos lo que quiere exactamente :) – JMax

+0

hmm .. ¡Intenté esto y todo sigue siendo exactamente igual! –

3
for root, dirs, filenames in os.walk(folder): 
    to_write = ['root == %s\n' % root] 

    for filename in filenames: 
     filename_zero, fileext = os.path.splitext(filename) 
     newname = "%s_%s_manual%s" % (filename_zero[:-2],filename_zero[-2:],fileext) 

     tu = (os.path.join(root, filename), os.path.join(root, newname)) 

     to_write.append('%s --> %s\n' % tu) 
     os.rename(*tu) 

    print '\n'.join(to_write) 
+0

funciona como un encanto! –

+0

@Alice Duff ¡Es encantadora la serpiente! Por cierto, uso el objeto ** to_write ** para retrasar la impresión en trozos, por lo que la ejecución general es más rápida – eyquem

+0

ok gracias por la sugerencia! –

5

Para una toma más generalizada sobre la respuesta de hughdbrown. Este código se puede usar para eliminar cualquier personaje o conjunto de caracteres en particular.

import os 

paths = (os.path.join(root, filename) 
     for root, _, filenames in os.walk('C:\FolderName') 
     for filename in filenames) 

for path in paths: 
    # the '#' in the example below will be replaced by the '-' in the filenames in the directory 
    newname = path.replace('#', '-') 
    if newname != path: 
     os.rename(path, newname) 
Cuestiones relacionadas