删除文件夹

时间:2017-01-19 17:28:21

标签: python python-2.7

我正在尝试创建一个python脚本,该脚本将转到特定文件夹并从文件名中删除所有数字。

这是代码

def rename_file():
    print"List of Files:"
print(os.getcwd())
os.chdir("/home/n3m0/Desktop/Pictures")

for fn in os.listdir(os.getcwd()):
   print("file w/ numbers -" +fn)
   print("File w/o numbers - "+fn.translate(None, "0123456789"))
os.rename(fn, fn.translate(None, "0123456789"))

os.chdir("/home/n3m0/Desktop/Pictures")
rename_files()

我要做的是删除所有数字,以便我能够读取文件名

例如我想: B45608aco4897n Pan44ca68ke90s1.jpgBacon Pancakes.jpg

当我运行脚本时,它会更改终端中的所有名称,但是当我转到该文件夹​​时,只更改了一个文件名,我必须多次运行该脚本。我正在使用python 2.7。

2 个答案:

答案 0 :(得分:1)

我现在不是100%,因为我现在只是在手机上,但试试这个:

from string import digits    

def rename_files():
    os.chdir("/whatever/directory/you/want/here")
    for fn in os.listdir(os.getcwd()):
        os.rename(fn, fn.translate(None, digits))

rename_files()

答案 1 :(得分:1)

你的缩进有点混乱,这是造成你问题的一部分。您也不一定需要更改工作目录 - 我们只需跟踪我们正在查看的文件夹并使用os.path.join重建文件路径,如下所示:

import os
from string import digits

def renamefiles(folder_path):
    for input_file in os.listdir(folder_path):
        print 'Original file name: {}'.format(input_file)

        if any(str(x) in input_file for x in digits):
            new_name = input_file.translate(None, digits)
            print 'Renaming: {} to {}'.format(input_file, new_name)
            os.rename(os.path.join(folder_path, input_file), os.path.join(folder_path, new_name))


rename_files('/home/n3m0/Desktop/Pictures')

这会生成一个可以重复使用的方法 - 我们遍历文件夹中的所有项目,打印原始名称。然后我们检查文件名中是否有任何数字,如果是,我们重命名该文件。

但请注意,此方法并不是特别安全 - 如果文件名完全由数字和扩展名组成,该怎么办?如果有两个文件名称与数字完全相同(例如asongtoruin0.jpgasongtoruin1.jpg),该怎么办?此方法仅保留找到的最后一个文件,覆盖第一个文件。查看os中可用的功能,以尝试解决此问题,尤其是os.path.isfile

编辑:有一些时间可用,这里有一点修复来捕获重命名为已存在的文件名的错误:

def renamefiles(folder_path):
    for input_file in os.listdir(folder_path):
        print 'Original file name: {}'.format(input_file)
        if any(str(x) in input_file for x in digits):
            new_name = input_file.translate(None, digits)

            # if removing numbers conflicts with an existing file, try adding a number to the end of the file name.
            i = 1
            while os.path.isfile(os.path.join(folder_path, new_name)):
                split = os.path.splitext(new_name)
                new_name = '{0} ({1}){2}'.format(split[0], i, split[1])

            print 'Renaming: {} to {}'.format(input_file, new_name)
            os.rename(os.path.join(folder_path, input_file), os.path.join(folder_path, new_name))


rename_files('/home/n3m0/Desktop/Pictures')