最近下载了有关某四大名著的资源,文件名是以“第四十二回 某某某某”这样的格式命名的,虽然很古典,但大部分文件浏览器而不能对其正确排序,并不方便。
于是,写了个Python脚本,识别其中中文数字并重命名为数字。可以作为中文数字处理的参照。如果自己的文件名称格式与这个例子不同,可以修改正则表达式。
其实,只要思路正确,这事儿比想象的简单。
import os
import re
def chinese_to_number(cn_num_str):
chinese_digits = {
'零': 0,
'一': 1,
'二': 2,
'三': 3,
'四': 4,
'五': 5,
'六': 6,
'七': 7,
'八': 8,
'九': 9,
'十': 10,
'百': 100,
'千': 1000,
'万': 10000,
'亿': 100000000
}
total = 0
current = 0
for char in cn_num_str:
if char in chinese_digits:
value = chinese_digits[char]
if value >= 10: # 处理单位
if current == 0:
current = 1
total += current * value
current = 0
else: # 处理数字
current += value
else:
raise ValueError(f"包含无法识别的中文字符: {char}")
total += current
return total
def main():
folder_path = input("请输入文件夹路径:").strip()
for filename in os.listdir(folder_path):
file_path = os.path.join(folder_path, filename)
if not os.path.isfile(file_path):
continue
match = re.match(r'^第([一二三四五六七八九十零百千万亿]+)回', filename)
if not match:
continue
try:
cn_num_str = match.group(1)
num = chinese_to_number(cn_num_str)
padded_num = f"{num:03d}"
new_filename = f"{padded_num}.{filename}"
new_path = os.path.join(folder_path, new_filename)
os.rename(file_path, new_path)
print(f"重命名成功: {filename} -> {new_filename}")
except Exception as e:
print(f"处理文件 {filename} 时出错: {str(e)}")
if __name__ == "__main__":
main()