files Rinominare più file in una directory in Python




python rinominare file (12)

Ho lo stesso problema, dove voglio sostituire lo spazio bianco in qualsiasi file pdf in un trattino - . Ma i file erano in più sottodirectory. Quindi, ho dovuto usare os.walk() . Nel tuo caso per più sottodirectory, potrebbe essere qualcosa del genere:

import os
for dpath, dnames, fnames in os.walk('/path/to/directory'):
    for f in fnames:
        os.chdir(dpath)
        if f.startswith('cheese_'):
            os.rename(f, f.replace('cheese_', ''))

Questa domanda ha già una risposta qui:

Sto cercando di rinominare alcuni file in una directory usando Python.

Diciamo che ho un file chiamato CHEESE_CHEESE_TYPE.*** e voglio rimuovere CHEESE_ così il mio nome file risultante sarebbe CHEESE_TYPE

Sto cercando di utilizzare os.path.split ma non funziona correttamente. Ho anche considerato l'utilizzo di manipolazioni di stringhe, ma non ho avuto successo neanche con questo.


Ecco una soluzione più generale:

Questo codice può essere utilizzato per rimuovere in modo ricorsivo qualsiasi carattere o set di caratteri in particolare da tutti i nomi di file all'interno di una directory e sostituirli con qualsiasi altro carattere, set di caratteri o nessun carattere.

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)

Che dire di questo :

import re
p = re.compile(r'_')
p.split(filename, 1) #where filename is CHEESE_CHEESE_TYPE.***

È possibile utilizzare la funzione os.system per semplicità e invocare bash per eseguire l'attività:

import os
os.system('mv old_filename new_filename')

Il seguente codice dovrebbe funzionare. Prende ogni nome di file nella directory corrente, se il nome del file contiene lo schema CHEESE_CHEESE_ quindi viene rinominato. Se non viene fatto nulla al nome del file.

import os
for fileName in os.listdir("."):
    os.rename(fileName, fileName.replace("CHEESE_CHEESE_", "CHEESE_"))

Questo genere di cose è perfettamente adattato per IPython, che ha l'integrazione della shell.

In [1] files = !ls
In [2] for f in files:
           newname = process_filename(f)
           mv $f $newname

Nota: per archiviare questo in uno script, utilizzare l'estensione .ipy e prefisso tutti i comandi della shell con ! .

Vedi anche: http://ipython.org/ipython-doc/stable/interactive/shell.html


import os import string def rename_files ():

#List all files in the directory
file_list = os.listdir("/Users/tedfuller/Desktop/prank/")
print(file_list)

#Change current working directory and print out it's location
working_location = os.chdir("/Users/tedfuller/Desktop/prank/")
working_location = os.getcwd()
print(working_location)

#Rename all the files in that directory
for file_name in file_list:
    os.rename(file_name, file_name.translate(str.maketrans("","",string.digits)))

rename_files ()


Questo comando rimuoverà la stringa "CHEESE_" iniziale da tutti i file nella directory corrente, usando il renamer :

$ renamer --find "/^CHEESE_/" *

Prova questo:

import os
import shutil

for file in os.listdir(dirpath):
    newfile = os.path.join(dirpath, file.split("_",1)[1])
    shutil.move(os.path.join(dirpath,file),newfile)

Suppongo che tu non voglia rimuovere l'estensione del file, ma puoi semplicemente eseguire lo stesso split con i periodi.


Usa os.rename(src, dst) per rinominare o spostare un file o una directory.

$ ls
cheese_cheese_type.bar  cheese_cheese_type.foo
$ python
>>> import os
>>> for filename in os.listdir("."):
...  if filename.startswith("cheese_"):
...    os.rename(filename, filename[7:])
... 
>>> 
$ ls
cheese_type.bar  cheese_type.foo

Supponendo che tu sia già nella directory e che i "primi 8 caratteri" del tuo commento siano sempre veri. (Anche se "CHEESE_" è composto da 7 caratteri ...? Se è così, cambia l'8 in basso a 7)

from glob import glob
from os import rename
for fname in glob('*.prj'):
    rename(fname, fname[8:])

Ecco uno script basato sul tuo ultimo commento.

#!/usr/bin/env python
from os import rename, listdir

badprefix = "cheese_"
fnames = listdir('.')

for fname in fnames:
    if fname.startswith(badprefix*2):
        rename(fname, fname.replace(badprefix, '', 1))






file-rename