Python 删除文件名中最后一个下划线之前的所有字符_
如何从CWD中递归的所有文件名中删除Python 删除文件名中最后一个下划线之前的所有字符_,python,python-3.x,Python,Python 3.x,如何从CWD中递归的所有文件名中删除.ext前面最后一个下划线之前的所有字符 这最好是通过split-and-replace或regex(^[^\uuz]+\uu?)来实现的吗?下面的代码不起作用(无错误消息。) 代码: 我认为拆分是最简单的方法,尽管我不确定你为什么需要替换 既然您是从path.join开始的,为什么不先“更正”文件名,然后再加入路径呢?现在看起来您正在创建“错误”的文件路径,然后返回并修改它们 filename = filename.split('_')[-1] 这会将文件
.ext
前面最后一个下划线之前的所有字符
这最好是通过split-and-replace或regex(^[^\uuz]+\uu
?)来实现的吗?下面的代码不起作用(无错误消息。)
代码:
我认为拆分是最简单的方法,尽管我不确定你为什么需要替换 既然您是从path.join开始的,为什么不先“更正”文件名,然后再加入路径呢?现在看起来您正在创建“错误”的文件路径,然后返回并修改它们
filename = filename.split('_')[-1]
这会将文件名拆分为字符串列表(沿每个“389;”)并返回最后一个条目,例如上面第一个示例中的“xxx.txt”。您的代码错误:
for path in paths:
newname = path.replace("^[^_]+_")
str.replace
不支持正则表达式(需要另一个参数:空字符串),并且(主要问题)正则表达式无法工作,因为path
是目录的完整路径,因此^
无法工作
而且,你的正则表达式也不起作用。您只需要删除所有字符,直到下划线(贪婪模式),以便:
re.sub(".*_","",s)
我将使用basename应用替换,然后将其连接回完整路径。还要注意,如果目标文件名存在,os.rename
将失败。我增加了一个保护措施来防止这种情况
下面的代码分解了我的方法:
import re
for path in paths:
the_dir = os.path.dirname(path)
newname = re.sub(".*_","",os.path.basename(path))
newpath = os.path.join(the_dir,newname)
if path != newpath:
if os.path.exists(newpath):
print("Warning: cannot rename into {}".format(newpath))
else:
os.rename(path,newpath)
path.replace(^[^\u]+\u)
?什么????这是无效的,并且replace不支持正则表达式。谢谢,有什么建议吗?最好的方法是什么?'aaa\u bbb\u 000\u xxx.txt'。split('uu')[-1]
请注意,您不应该编辑您的问题以反映答案所做的建议,因为它会完全关闭答案。我恢复到以前的版本,只是修复了丢失的报价输入错误。现在我也要更新我的答案了。谢谢。我将代码与path=os.getcwd()
一起使用,但我遇到了一个错误:`namererror:name'paths'未定义。我有一个非常类似的解决方案,但你抢先一步+1@HakariDo你仍然需要你的gencomp:path=(os.path.join(cwd,filename)用于cwd,u,os.walk中的文件名(cwd)用于文件名中的文件名)
我在OP中更新运行,并且得到:name错误名称“re”未定义。import re
添加。使用filename=filename.split如何进行实际重命名(“”“)[-1]
您可以尝试:newname=os.path.basename(path).split(“”“)[-1](代替当前的newname行)
re.sub(".*_","",s)
import re
for path in paths:
the_dir = os.path.dirname(path)
newname = re.sub(".*_","",os.path.basename(path))
newpath = os.path.join(the_dir,newname)
if path != newpath:
if os.path.exists(newpath):
print("Warning: cannot rename into {}".format(newpath))
else:
os.rename(path,newpath)