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)
答案 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)
以下是重命名文件的一种方法。
os.renames
重命名文件file_name.strip("0123456789")
删除号码代码如下:
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()