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