如何在不从扩展名中删除点的情况下删除文件名中的点



我正在遍历一个包含不同扩展名文件的文件夹。我想从文件名中删除点('.'(,但不删除扩展名。如果我只是这么做:

def filename_replacer(file_name):
extension = file_name[-4:]
raw_name = file_name[:-4]       
new_name = raw_name.replace(".", "_")
new_name = new_name + extension
return new_name
file = "Remove.TheDotReport.xlsx"
cleaned_file = filename_replacer(file)

结果不正确(例如:Remove_TheDotReport_xlxs(。如何在不弄乱扩展名的情况下始终如一地删除文件中的点?

使用os.path.splitext首先获得扩展。

import os
def filename_replacer(filename):
fname, fext = os.path.splitext(filename)
return fname.replace(".", "_") + fext

自Python 3.4以来,使用路径的一种方便方法是pathlib内置库。它将路径视为对象,而不是简单的字符串

自Python 3.9以来,添加了一个新方法with_stem,它只更改文件名,不更改扩展名。所以这可以很容易地完成:

from pathlib import Path
path = Path("Remove.TheDotReport.xlsx")
print(path.with_stem(path.stem.replace('.', '_')))
# Remove_TheDotReport.xlsx

对于旧版本,您仍然可以使用with_name方法,但需要做更多的工作(单独添加扩展(:

from pathlib import Path
path = Path("Remove.TheDotReport.xlsx")
print(path.with_name(path.stem.replace('.', '_') + path.suffix))
# Remove_TheDotReport.xlsx

这是为了让bash脚本从文件名中删除句点,并保留扩展名句点,如果您想更改任何文件('dir /b *.filename'(,请在此处指定文件名。

@echo off
for /f "delims=" %%a in ('dir /b *') do call :dot "%%a"
pause
goto :EOF
:dot
set "var=%~n1"
set "var=%var:.= %"
ren %1 "%var%%~x1"

相关内容

  • 没有找到相关文章

最新更新