我正在尝试创建一个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.jpg
说Bacon Pancakes.jpg
当我运行脚本时,它会更改终端中的所有名称,但是当我转到该文件夹时,只更改了一个文件名,我必须多次运行该脚本。我正在使用python 2.7。
答案 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.jpg
和asongtoruin1.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')