如何替换字符串中文件扩展名前的文本?(Python实现)
解决方案
你的问题核心在于lstrip()的用法不对——它接收的是字符集合,不是完整的字符串/元组,会把文件名里匹配到的单个字符逐个移除,根本达不到你想要的“去掉扩展名前名称”的效果。replace()也不靠谱,因为没法保证只替换前缀部分。
给你两种靠谱的实现方式:
方法一:用os.path.splitext(推荐)
Python的os.path模块自带了分割文件名和扩展名的工具,省心又不会出错:
import os def main(): valid_extensions = (".gif", ".jpeg", ".jpg", ".png", ".pdf", ".txt", ".zip") file_input = input("What file would you like to run? \n>> ") _, ext = os.path.splitext(file_input) # 下划线用来接收不需要的文件名部分 if ext in valid_extensions: # 如果要输出格式是 `image/.zip` 就用下面这行 print(f"image/{ext}") # 如果要输出格式是 `image/zip`(去掉扩展名的点),就换成这行: # print(f"image/{ext.lstrip('.')}") else: print("Unsupported file extension") main()
方法二:手动分割(不依赖模块)
如果不想导入模块,可以通过查找最后一个.的位置来分割文件名和扩展名:
def main(): valid_extensions = (".gif", ".jpeg", ".jpg", ".png", ".pdf", ".txt", ".zip") file_input = input("What file would you like to run? \n>> ") dot_pos = file_input.rfind('.') if dot_pos != -1: ext = file_input[dot_pos:] if ext in valid_extensions: print(f"image/{ext}") # 同样,要去掉点的话用:print(f"image/{ext[1:]}") else: print("Unsupported file extension") else: print("No valid file extension found") main()
两种方法都能准确识别扩展名,然后替换前缀为image/,完全不会破坏扩展名的结构。
内容的提问来源于stack exchange,提问作者Cinder
相关产品推荐
相关产品推荐

