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

时间:2016-02-07 17:54:18

标签: python python-3.x

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()

上面的代码不会通过删除整数来重命名文件。有人可以帮忙吗? (Python 3x)

8 个答案:

答案 0 :(得分:4)

import re

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

答案 1 :(得分:3)

在Python 3中,String.translate消失了。因此,您需要使用str.translate。它需要' str.maketrans'通常会创建一个包含前两个参数的转换表(本例中不需要),第三个参数提供要剥离的字符。

这一行应该有所期望的效果......

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

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

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

答案 2 :(得分:2)

问题在于你的翻译功能没有做任何事情。有更好的选择,但如果您想使用translate,那么正确的语法是:

#!/usr/bin/env python2

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

答案 3 :(得分:2)

以下是重命名文件的一种方法。

  1. 使用os.renames重命名文件
  2. 使用file_name.strip("0123456789")删除号码
  3. 代码如下:

    import os
    def file_rename():
        name_list=os.listdir(r"C:\python\prank")
        print(name_list)
        saved_path=os.getcwd()
        print("Current working directory is"+saved_path)
        os.chdir(r"C:\python\prank")
    
        for file_name in name_list:
            print("old name"+file_name)
            print("new name"+file_name.strip("0123456789"))
            os.renames(file_name,file_name.strip("0123456789"))
        os.chdir(saved_path)
    
    file_rename()
    

    详细了解os.renames check here 要详细了解strip函数,check here

答案 4 :(得分:1)

在没有import re的情况下执行此操作的另一种方法。不使用.translate,而是使用.strip

os.rename(file_name, file_name.strip('0123456789'))

另一个观察结果是您的代码在更改后不会读取新文件名。在代码的顶部,您正在阅读文件名并将这些名称保存在file_list

# (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")

在for循环中,您要更改每个文件的名称,您不会读取新文件的名称。你需要做这样的事情。

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

# (3) read file's name again... 'file_list' has old names
new_file_list = os.listdir(r"C:\Users\USEER\Desktop\Udacity\Udacity - Programming Foundation with Python\Project\prank\prank")
for file_name in new_file_list:
    print("New file's name: " + new_file_name)

os.chdir(saved_path)

答案 5 :(得分:1)

import os

def rename_files():
    #1 Get file names from the folder
    file = os.listdir(r"C:\Web\Python\prank")
    print(file)
    saved_path = os.getcwd()
    print("Current Working Directory is"+saved_path)
    os.chdir(r"C:\Web\Python\prank")

    #2 For each file name rename file names
    for file_name in file:
       print("Old Name - " + file_name)
       os.rename(file_name,file_name.strip("0123456789"))
       print("New Name - " + file_name)

    os.chdir(saved_path)
rename_files()

答案 6 :(得分:1)

enter code here
import os

dir="/home/lucidvis/myPythonHome/prank/"

def rename_files():

# get file names from a folder
    filenames = os.listdir(dir)
   # print(filenames)
    for file in filenames:
        #print(file)
        try:
            #with os.open(filename for filename in filenames,"r+"):
               #read_file = filename.read()

       # new_name = file.translate(str.maketrans('','', "0123456789"))
            new_filname = (file.translate(str.maketrans('','', "0123456789"))).replace(" ","")
            #print(dir+new_file_name)
            os.rename(dir+file,dir+new_file_name)
        except SyntaxError as e:
            print(e)
            continue

# for each file, rename filename
rename_files()

import os

dir="/home/lucidvis/myPythonHome/prank/"

def rename_files():

# get file names from a folder
    filenames = os.listdir(dir)
# iterate through the list of filenames
    for file in filenames:
        #print(file)
        try:              
#assign a variable to new names for easy manipulation
            new_filname = (file.translate(str.maketrans('','', "0123456789"))).replace(" ","")
            #concatenating the directory name to old and new file names 
            os.rename(dir+file,dir+new_file_name)
#just to manage errors
        except SyntaxError as e:
            print(e)
            continue

#file renaming function call
rename_files()

答案 7 :(得分:0)

我正在尝试解决这个问题的人,因为我看到udacity在线课程,并且由于simon的重放,它需要重命名没有数字的文件,我不得不弄清楚了

这是我的代码,用于重命名不带数字的文件,希望它对任何卡住的人有所帮助

import os
import re

def rename():

    #get the list of the photo name
    plist = os.listdir(r"D:\pay\prank")
    print(plist)
    #removing the numbers from the photo names

    os.chdir(r"D:\pay\prank")
    for pname in plist :
        os.rename(pname, re.sub('[0-9]', '' , pname))
        print(pname)
rename()