所以我使用脚本将文件名拆分为“名称”和“扩展名”,这样我就可以应用一堆规则并使用“名称”并让脚本在最后将所有内容重新组合在一起
目前,我正在使用:
import os, shutil, re
def rename_file (original_filename):
name, extension = os.path.splitext(original_filename)
name = re.sub(r"\'", r"", name) # etc...more of these...
new_filename = name + extension
try:
# moves files or directories (recursively)
shutil.move(original_filename, new_filename)
except shutil.Error:
print ("Couldn't rename file %(original_filename)s!" % locals())
[rename_file(f) for f in os.listdir('.') if not f.startswith('.')]
我的问题是os.path.splitext()包含“.partX.rar”的“.part(s)”作为文件名的一部分,而我希望它包含在作为文件名的一部分文件扩展名。
如何让脚本执行此操作(没有“扩展名”列表或rar文件的完全独立的脚本)?
谢谢!
答案 0 :(得分:2)
os.path.splitext
反向搜索“。”并返回它找到的第一个匹配项。因此,开箱即用的splitext将无法满足您的需求。如果您只是使用它来标记文件名,我建议您通过拆分来自己解析文件名。以左侧为名,然后重新加入右侧。
这是一种方法:
def split_name(file_name):
'''
Returns root_filename, 'middle tokens', and extension
'''
tokens = file_name.split('.')
return (tokens[0], ".".join(tokens[1:-1]), tokens[-1]) if len(tokens) >1 else file_name
file_name = 'this.is.a.txt'
split_name(file_name)
#result is:
>>> ('this', 'is.a', 'txt')