import os
def count_a(filename):
"""统计文件名中的a的数量,其中a是空格或下划线"""
return sum(1 for char in filename if char in ['_', ' '])
def modify_filename(filename, a_range):
"""根据a的范围修改文件名"""
new_name = list(filename)
a_indices = [i for i, char in enumerate(filename) if char in ['_', ' ']]
if not a_indices:
return filename # 如果没有a,则返回原文件名
if '-' in a_range:
start, end = map(int, a_range.split('-'))
for idx in range(start-1, min(end, len(a_indices))):
new_name[a_indices[idx]] = '_'
for idx in a_indices[end:]:
new_name[idx] = ' '
else:
idx = int(a_range) - 1
if 0 <= idx < len(a_indices):
new_name[a_indices[idx]] = '_'
for i in a_indices:
if i != a_indices[idx]:
new_name[i] = ' '
return ''.join(new_name)
def main():
while True:
try:
folder_path = input("请输入文件夹地址: ")
if not os.path.exists(folder_path) or not os.path.isdir(folder_path):
raise ValueError("指定的路径不存在或不是一个有效的文件夹!")
a_range = input("请输入a的范围 (例如: 1-5 或 1): ")
if '-' in a_range:
start, end = map(int, a_range.split('-'))
if start <= 0 or end <= 0:
raise ValueError("范围值应为正数!")
else:
if int(a_range) <= 0:
raise ValueError("范围值应为正数!")
for root, dirs, files in os.walk(folder_path):
for file in files:
if file.lower().endswith(('.png', '.jpg', '.jpeg')):
a_count = count_a(file)
print(f"'{file}' 中有 {a_count} 个a。")
new_name = modify_filename(file, a_range)
os.rename(os.path.join(root, file), os.path.join(root, new_name))
print(f"'{file}' 已经更名为 '{new_name}'。")
break
except ValueError as ve:
print(f"错误: {ve}")
except Exception as e:
print(f"发生异常: {e}")
if __name__ == "__main__":
main()