Python 3x从文件名中删除数字

2024-09-30 20:24:25 发布

您现在位置:Python中文网/ 问答频道 /正文

import os

def rename_files():
    # (1) get file names from a folder
    file_list = os.listdir(r"C:\Users\USEER\Desktop\Udacity\Udacity - Programming Foundation with Python\Project\prank\prank")

    # print(file_list)
    saved_path = os.getcwd()
    print("Current Working Directory is " + saved_path)
    os.chdir(r"C:\Users\USEER\Desktop\Udacity\Udacity - Programming Foundation with Python\Project\prank\prank")

    # (2) for each file, rename file name
    for file_name in file_list:
        print("Old Name - " + file_name)
        print("New Name - " + file_name.translate("0123456789"))
        os.rename(file_name, file_name.translate("0123456789"))
    os.chdir(saved_path)

rename_files()

上面的代码没有通过删除整数来重命名文件。有人能帮忙吗?(Python3倍)


Tags: pathnameosfilesuserslistfileprogramming
3条回答
import re

new_name = re.sub('[0-9]', '', file_name)

在Python 3中,String.translate已不存在。因此您需要使用str.translate。它需要'str.maketrans',它通常创建一个翻译表,并提供前两个参数(本例中不需要),第三个参数提供要剥离的字符。

这条线应该有预期的效果。。。

os.rename(file_name, file_name.translate(str.maketrans('','','0123456789'))

以前的建议使用了.strip(),但是在这种情况下,由于数字与文件名混合在一起(不是在文件名之前或之后),我认为这是行不通的,另外一个使用的正则表达式是完全有效的,但是在这个特殊的Udacity课程的上下文中,translate是建议的解决方案。

以下是maketrans的文档: [https://docs.python.org/3/library/stdtypes.html#str.maketrans][1]

问题是你的翻译功能什么也做不了。有更好的选择,但如果您想使用translate,那么正确的语法是:

#!/usr/bin/env python2

import string
new_name = string.translate(file_name, None, "0123456789")

相关问题 更多 >