import os
import re
def rename_files():
# get the files from dir
file_list=os.listdir(r"C:\OOP\prank")
print(file_list)
saved_path=os.getcwd()
print("current working directory"+saved_path)
os.chdir(r"C:\OOP\prank")
#rename the files
for file_name in file_list:
print("old name-"+file_name)
#print("new name-"+file_name.strip("0123456789"))
os.rename(file_name,file_name.translate(None,"0123456789"))
os.chdir(saved_path)
rename_files()
由于翻译行显示错误...帮助我下一步做什么..我正在使用翻译从文件名中删除数字。
Traceback (most recent call last):
File "C:\Users\vikash\AppData\Local\Programs\Python\Python35- 32\pythonprogram\secretName.py", line 17, in <module>
rename_files()
File "C:\Users\vikash\AppData\Local\Programs\Python\Python35- 32\pythonprogram\secretName.py", line 15, in rename_files
os.rename(file_name,file_name.translate(None,"0123456789"))
TypeError: translate() takes exactly one argument (2 given)
str.translate
需要一个将unicode序数映射到其他unicode oridinals的dict
(如果你想删除这个角色,则需要None
)。您可以像这样创建它:
old_string = "file52.txt"
to_remove = "0123456789"
table = {ord(char): None for char in to_remove}
new_string = old_string.translate(table)
assert new_string == "file.txt"
但是,通过使用str.maketrans
函数,可以更简单地制作表格。它可以采用各种各样的参数,但是你需要三个arg形式。我们忽略前两个args,因为它们用于将字符映射到其他字符。第三个arg是您要删除的字符。
old_string = "file52.txt"
to_remove = "0123456789"
table = str.maketrans("", "", to_remove)
new_string = old_string.translate(table)
assert new_string == "file.txt"
Python中的更高版本使用此:
eg: oldname= "delhi123"
remove="1234567890"
table=str.maketrans("","",remove)
oldname.translate(table)
您的查询的整体解决方案:
import os
def rename_file_names():
file_list=os.listdir(r"C:\Users\welcome\Downloads\Compressed\prank")
print (file_list)
saved_path=os.getcwd()
print("current working direcorty is"+saved_path)
os.chdir(r"C:\Users\welcome\Downloads\Compressed\prank")
remove="123456789"
table=str.maketrans("","",remove)
for file_name in file_list:
os.rename(file_name,file_name.translate(table))
rename_file_names()
将os.rename(file_name,file_name.translate(None,"0123456789"))
改为os.rename(file_name,file_name.translate(str.maketrans('','',"0123456789")))
,它会起作用。
而不是翻译为什么不这样做:
os.rename(file_name,''.join([i for i in file_name if not i.isdigit()]))
如果你使用python 3.X,试试这个:file_name.lstrip()
os.rename(file_name,file_name.lstrip(None,"0123456789"))
这个功能
str.translate(table[, deletechars])
仅适用于python 2.7。如果您使用的是更高版本,则可以使用以下功能,该功能非常类似,并且可以在更高版本的python中使用。
bytes.translate(table[, delete=b''])
它返回bytes对象的副本,其中删除了可选参数delete中出现的所有字节
所以在你的代码中,改变这行代码
os.rename(file_name,file_name.translate(None,"0123456789"))
同
file_name_bytes = str.encode(file_name)
os.rename(file_name, file_name_bytes.translate(None, b"0123456789")
使用下面的代码:
os.rename(file_name,file_name.lstrip("0123456789"))