Wsadowa zmiana nazwy plików w katalogu
Czy istnieje łatwy sposób na zmianę nazwy grupy plików już zawartych w katalogu, używając Pythona?
Przykład: mam katalog pełen *.pliki doc i chcę je zmienić w spójny sposób.
X.doc - > " nowy (X).doc "
Y.doc - > " nowy (Y).doc "
11 answers
Taka zmiana nazwy jest dość łatwa, na przykład z modułami os i glob :
import glob, os
def rename(dir, pattern, titlePattern):
for pathAndFilename in glob.iglob(os.path.join(dir, pattern)):
title, ext = os.path.splitext(os.path.basename(pathAndFilename))
os.rename(pathAndFilename,
os.path.join(dir, titlePattern % title + ext))
Możesz użyć go w swoim przykładzie w następujący sposób:
rename(r'c:\temp\xx', r'*.doc', r'new(%s)')
Powyższy przykład przekonwertuje wszystkie pliki {[2] } w katalogu c:\temp\xx
na new(%s).doc
, Gdzie %s
jest poprzednią nazwą bazową pliku (bez rozszerzenia).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-22 18:59:57
Wolę pisać małe linijki dla każdego zastąpienia, które muszę zrobić, zamiast tworzyć bardziej ogólny i złożony kod. Np.:
Zastępuje wszystkie podkreślniki myślnikami w dowolnym Nie ukrytym pliku w bieżącym katalogu
import os
[os.rename(f, f.replace('_', '-')) for f in os.listdir('.') if not f.startswith('.')]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-27 14:53:14
Jeśli nie masz nic przeciwko używaniu wyrażeń regularnych, ta funkcja dałaby Ci wiele mocy w zmienianiu nazw plików:
import re, glob, os
def renamer(files, pattern, replacement):
for pathname in glob.glob(files):
basename= os.path.basename(pathname)
new_filename= re.sub(pattern, replacement, basename)
if new_filename != basename:
os.rename(
pathname,
os.path.join(os.path.dirname(pathname), new_filename))
Więc w twoim przykładzie możesz zrobić (zakładając, że jest to bieżący katalog, w którym znajdują się pliki):
renamer("*.doc", r"^(.*)\.doc$", r"new(\1).doc")
Ale możesz też wrócić do początkowych nazw plików:
renamer("*.doc", r"^new\((.*)\)\.doc", r"\1.doc")
I więcej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-22 19:30:05
Mam to po prostu zmienić nazwę wszystkich plików w podfolderach folderu
import os
def replace(fpath, old_str, new_str):
for path, subdirs, files in os.walk(fpath):
for name in files:
if(old_str.lower() in name.lower()):
os.rename(os.path.join(path,name), os.path.join(path,
name.lower().replace(old_str,new_str)))
Zamieniam wszystkie wystąpienia old_str na any case przez new_str.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-04 09:46:49
Try: http://www.mattweber.org/2007/03/04/python-script-renamepy/
Lubię mieć swoją muzykę, film i Pliki Obrazów nazwane w określony sposób. Gdy pobieram pliki z internet, zwykle nie podążają za moim konwencja nazewnictwa. I found myself ręcznie zmieniając nazwę KAŻDEGO pliku, aby pasował do mojego styl. To się szybko starzeje, więc ... postanowiłem napisać program do tego dla mnie.
Ten program potrafi przekonwertować nazwę pliku do wszystkich małych liter, zastąp struny w nazwa pliku z czym chcesz, i przyciąć dowolną ilość znaków z przód lub tył nazwy pliku.
Dostępny jest również kod źródłowy programu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-22 13:37:36
Napisałem skrypt Pythona na własną rękę. Przyjmuje jako argumenty ścieżkę katalogu, w którym znajdują się pliki oraz wzorzec nazewnictwa, którego chcesz użyć. Jednak zmienia nazwy, dołączając liczbę przyrostową (1, 2, 3 itd.) do podanego wzorca nazewnictwa.
import os
import sys
# checking whether path and filename are given.
if len(sys.argv) != 3:
print "Usage : python rename.py <path> <new_name.extension>"
sys.exit()
# splitting name and extension.
name = sys.argv[2].split('.')
if len(name) < 2:
name.append('')
else:
name[1] = ".%s" %name[1]
# to name starting from 1 to number_of_files.
count = 1
# creating a new folder in which the renamed files will be stored.
s = "%s/pic_folder" % sys.argv[1]
try:
os.mkdir(s)
except OSError:
# if pic_folder is already present, use it.
pass
try:
for x in os.walk(sys.argv[1]):
for y in x[2]:
# creating the rename pattern.
s = "%spic_folder/%s%s%s" %(x[0], name[0], count, name[1])
# getting the original path of the file to be renamed.
z = os.path.join(x[0],y)
# renaming.
os.rename(z, s)
# incrementing the count.
count = count + 1
except OSError:
pass
Mam nadzieję, że to zadziała.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-15 05:56:20
directoryName = "Photographs"
filePath = os.path.abspath(directoryName)
filePathWithSlash = filePath + "\\"
for counter, filename in enumerate(os.listdir(directoryName)):
filenameWithPath = os.path.join(filePathWithSlash, filename)
os.rename(filenameWithPath, filenameWithPath.replace(filename,"DSC_" + \
str(counter).zfill(4) + ".jpg" ))
# e.g. filename = "photo1.jpg", directory = "c:\users\Photographs"
# The string.replace call swaps in the new filename into
# the current filename within the filenameWitPath string. Which
# is then used by os.rename to rename the file in place, using the
# current (unmodified) filenameWithPath.
# os.listdir delivers the filename(s) from the directory
# however in attempting to "rename" the file using os
# a specific location of the file to be renamed is required.
# this code is from Windows
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-30 08:52:01
Miałem podobny problem, ale chciałem dodać tekst do początku nazwy pliku wszystkich plików w katalogu i zastosowałem podobną metodę. Zobacz przykład poniżej:
folder = r"R:\mystuff\GIS_Projects\Website\2017\PDF"
import os
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
fullpath = os.path.join(root, filename)
filename_split = os.path.splitext(filename) # filename will be filename_split[0] and extension will be filename_split[1])
print fullpath
print filename_split[0]
print filename_split[1]
os.rename(os.path.join(root, filename), os.path.join(root, "NewText_2017_" + filename_split[0] + filename_split[1]))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-25 06:22:55
# another regex version
# usage example:
# replacing an underscore in the filename with today's date
# rename_files('..\\output', '(.*)(_)(.*\.CSV)', '\g<1>_20180402_\g<3>')
def rename_files(path, pattern, replacement):
for filename in os.listdir(path):
if re.search(pattern, filename):
new_filename = re.sub(pattern, replacement, filename)
new_fullname = os.path.join(path, new_filename)
old_fullname = os.path.join(path, filename)
os.rename(old_fullname, new_fullname)
print('Renamed: ' + old_fullname + ' to ' + new_fullname
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-02 15:57:25
Jak dla mnie w moim katalogu mam wiele subdir, każdy subdir ma wiele obrazów chcę zmienić wszystkie obrazy subdir na 1.jpg ~ n.jpg
def batch_rename():
base_dir = 'F:/ad_samples/test_samples/'
sub_dir_list = glob.glob(base_dir + '*')
# print sub_dir_list # like that ['F:/dir1', 'F:/dir2']
for dir_item in sub_dir_list:
files = glob.glob(dir_item + '/*.jpg')
i = 0
for f in files:
os.rename(f, os.path.join(dir_item, str(i) + '.jpg'))
i += 1
(mys own answer) https://stackoverflow.com/a/45734381/6329006
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-17 11:59:31
Bądź w katalogu, w którym musisz dokonać zmiany nazwy.
import os
# get the file name list to nameList
nameList = os.listdir()
#loop through the name and rename
for fileName in nameList:
rename=fileName[15:28]
os.rename(fileName,rename)
#example:
#input fileName bulk like :20180707131932_IMG_4304.JPG
#output renamed bulk like :IMG_4304.JPG
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-03 21:43:41