使用 .rename 和 .endswith 重命名多个图像
Renaming multiple images with .rename and .endswith
我一直在努力让它发挥作用,但我觉得我错过了什么。文件夹中有大量图像,我只需要重命名部分文件名。例如,我试图将 "RJ_200"、"RJ_600" 和 "RJ_60"1 全部重命名为相同的 "RJ_500",同时保持文件名的其余部分不变。
Image01.Food.RJ_200.jpg
Image02.Food.RJ_200.jpg
Image03.Basket.RJ_600.jpg
Image04.Basket.RJ_600.jpg
Image05.Cup.RJ_601.jpg
Image06.Cup.RJ_602.jpg
这是我目前所拥有的,但它一直只给我 "else" 而不是实际重命名它们中的任何一个:
import os
import fnmatch
import sys
user_profile = os.environ['USERPROFILE']
dir = user_profile + "\Desktop" + "\Working"
print (os.listdir(dir))
for images in dir:
if images.endswith("RJ_***.jpg"):
os.rename("RJ_***.jpg", "RJ_500.jpg")
else:
print ("Arg!")
Python 字符串方法 endswith
不与 *
进行模式匹配,因此您要查找明确包含星号字符的文件名,但找不到任何文件名。
尝试使用正则表达式来匹配您的文件名,然后显式构建您的目标文件名:
import os
import re
patt = r'RJ_\d\d\d'
user_profile = os.environ['USERPROFILE']
path = os.path.join(user_profile, "Desktop", "Working")
image_files = os.listdir(path)
for filename in image_files:
flds = filename.split('.')
try:
frag = flds[2]
except IndexError:
continue
if re.match(patt, flds[2]):
from_name = os.path.join(path, filename)
to_name = '.'.join([flds[0], flds[1], 'RJ_500', 'jpg'])
os.rename(from_name, os.path.join(path, to_name))
请注意,您需要使用文件的基本名称进行匹配,稍后加入路径的其余部分。
您不需要使用 .endswith
。您可以使用 .split
拆分图像文件名并检查结果。由于涉及多个后缀字符串,我将它们全部放入一个 set
以进行快速成员资格测试。
import os
import re
import sys
suffixes = {"RJ_200", "RJ_600", "RJ_601"}
new_suffix = "RJ_500"
user_profile = os.environ["USERPROFILE"]
dir = os.path.join(user_profile, "Desktop", "Working")
for image_name in os.listdir(dir):
pieces = image_name.split(".")
if pieces[2] in suffixes:
from_path = os.path.join(dir, image_name)
new_name = ".".join([pieces[0], pieces[1], new_suffix, pieces[3]])
to_path = os.path.join(dir, new_name)
print("renaming {} to {}".format(from_path, to_path))
os.rename(from_path, to_path)
我一直在努力让它发挥作用,但我觉得我错过了什么。文件夹中有大量图像,我只需要重命名部分文件名。例如,我试图将 "RJ_200"、"RJ_600" 和 "RJ_60"1 全部重命名为相同的 "RJ_500",同时保持文件名的其余部分不变。
Image01.Food.RJ_200.jpg
Image02.Food.RJ_200.jpg
Image03.Basket.RJ_600.jpg
Image04.Basket.RJ_600.jpg
Image05.Cup.RJ_601.jpg
Image06.Cup.RJ_602.jpg
这是我目前所拥有的,但它一直只给我 "else" 而不是实际重命名它们中的任何一个:
import os
import fnmatch
import sys
user_profile = os.environ['USERPROFILE']
dir = user_profile + "\Desktop" + "\Working"
print (os.listdir(dir))
for images in dir:
if images.endswith("RJ_***.jpg"):
os.rename("RJ_***.jpg", "RJ_500.jpg")
else:
print ("Arg!")
Python 字符串方法 endswith
不与 *
进行模式匹配,因此您要查找明确包含星号字符的文件名,但找不到任何文件名。
尝试使用正则表达式来匹配您的文件名,然后显式构建您的目标文件名:
import os
import re
patt = r'RJ_\d\d\d'
user_profile = os.environ['USERPROFILE']
path = os.path.join(user_profile, "Desktop", "Working")
image_files = os.listdir(path)
for filename in image_files:
flds = filename.split('.')
try:
frag = flds[2]
except IndexError:
continue
if re.match(patt, flds[2]):
from_name = os.path.join(path, filename)
to_name = '.'.join([flds[0], flds[1], 'RJ_500', 'jpg'])
os.rename(from_name, os.path.join(path, to_name))
请注意,您需要使用文件的基本名称进行匹配,稍后加入路径的其余部分。
您不需要使用 .endswith
。您可以使用 .split
拆分图像文件名并检查结果。由于涉及多个后缀字符串,我将它们全部放入一个 set
以进行快速成员资格测试。
import os
import re
import sys
suffixes = {"RJ_200", "RJ_600", "RJ_601"}
new_suffix = "RJ_500"
user_profile = os.environ["USERPROFILE"]
dir = os.path.join(user_profile, "Desktop", "Working")
for image_name in os.listdir(dir):
pieces = image_name.split(".")
if pieces[2] in suffixes:
from_path = os.path.join(dir, image_name)
new_name = ".".join([pieces[0], pieces[1], new_suffix, pieces[3]])
to_path = os.path.join(dir, new_name)
print("renaming {} to {}".format(from_path, to_path))
os.rename(from_path, to_path)