根据文件夹中的文件名找出对应的文件扩展名

Find out corresponding file extension given a filename in a folder

我想实现这样一个功能:输入一个不带扩展名的文件名和一个文件夹的文件列表,然后程序return输入全名加上相应的扩展名。比如我输入'private_car_10',文件夹的文件列表是:

['private_car_1.png', 'private_car_10.jpg', 'private_car_100.jpeg', 'private_car_101.jpg', 'private_car_102.jpg', 'private_car_103.jpg', 'private_car_104.jpg', 'private_car_105.jpg', 'private_car_106.jpg', 'private_car_107.jpg', 'private_car_108.jpg', 'private_car_109.jpg', 'private_car_11.jpg', 'private_car_110.jpg', 'private_car_111.jpg', 'private_car_112.jpg', 'private_car_113.jpg', 'private_car_114.jpg', 'private_car_115.jpg', 'private_car_116.jpg', 'private_car_117.jpg', 'private_car_118.jpg', 'private_car_119.jpg', 'private_car_12.jpg', 'private_car_120.jpg', 'private_car_121.jpg', 'private_car_122.jpg', 'private_car_123.jpg', 'private_car_124.jpg', 'private_car_125.jpg', 'private_car_126.jpg', 'private_car_127.jpg', 'private_car_128.jpg', 'private_car_129.jpg', 'private_car_13.jpg', 'private_car_130.jpg', 'private_car_131.jpg', 'private_car_132.jpg', 'private_car_133.jpg', 'private_car_134.jpg', 'private_car_135.jpg', 'private_car_136.jpg', 'private_car_137.jpg', 'private_car_138.jpg', 'private_car_139.jpg', 'private_car_14.png', 'private_car_140.jpg', 'private_car_141.jpg', 'private_car_142.jpg', 'private_car_143.jpg', 'private_car_144.jpg', 'private_car_145.jpg', 'private_car_146.jpg', 'private_car_147.jpg', 'private_car_148.jpg', 'private_car_149.jpg', 'private_car_15.jpg', 'private_car_150.jpg', 'private_car_151.jpg', 'private_car_152.jpg', 'private_car_153.jpg', 'private_car_154.jpg', 'private_car_155.jpg', 'private_car_156.jpg', 'private_car_157.jpg', 'private_car_158.jpg', 'private_car_159.jpg', 'private_car_16.jpg', 'private_car_160.jpg', 'private_car_161.jpg', 'private_car_162.jpg', 'private_car_163.jpg', 'private_car_164.jpg', 'private_car_165.jpg', 'private_car_166.jpg', 'private_car_167.jpg', 'private_car_168.jpg', 'private_car_169.jpg', 'private_car_17.jpg', 'private_car_170.jpg', 'private_car_171.jpg', 'private_car_172.jpg', 'private_car_173.jpg', 'private_car_174.jpg', 'private_car_175.jpg', 'private_car_176.jpg', 'private_car_177.jpg', 'private_car_178.jpg', 'private_car_179.jpeg', 'private_car_18.jpg', 'private_car_180.jpg', 'private_car_181.jpg', 'private_car_182.jpg', 'private_car_183.jpg', 'private_car_184.jpg', 'private_car_185.jpg', 'private_car_186.jpg', 'private_car_187.jpg', 'private_car_188.jpg', 'private_car_189.jpg', 'private_car_19.jpg', 'private_car_190.jpg', 'private_car_191.jpg', 'private_car_192.jpg', 'private_car_193.jpg', 'private_car_194.jpg', 'private_car_195.jpg', 'private_car_196.jpg', 'private_car_197.png', 'private_car_198.jpg', 'private_car_199.jpg', 'private_car_2.jpg', 'private_car_20.jpg', 'private_car_200.jpg']

我期待节目 return 'private_car_10.jpg'。我想我可以使用 python re 模块,但我不知道如何编写模式。

这里不需要正则表达式。假设文件名必须在列表中,您可以简单地拆分“。”并检查文件名是否相等。

def find_file_by_name(filename, folder_contents):
    return [file for file in folder_contents if file.rsplit('.', maxsplit=1)[0] == filename]

filename = 'private_car_10'
folder = ['private_car_1.jpg', 'private_car_10.jpg', 'private_car_10.png', 'private_car_100.jpg', 'private_car_101.jpg', 'private_car_102.jpg', 'private_car_103.jpg', 'private_car_104.jpg', 'private_car_105.jpg', 'private_car_106.jpg', 'private_car_107.jpg', 'private_car_108.jpg', 'private_car_109.jpg', 'private_car_11.jpg', 'private_car_110.jpg', 'private_car_111.jpg', 'private_car_112.jpg', 'private_car_113.jpg', 'private_car_114.jpg', 'private_car_115.jpg', 'private_car_116.jpg', 'private_car_117.jpg', 'private_car_118.jpg', 'private_car_119.jpg', 'private_car_12.jpg', 'private_car_120.jpg', 'private_car_121.jpg', 'private_car_122.jpg', 'private_car_123.jpg', 'private_car_124.jpg', 'private_car_125.jpg', 'private_car_126.jpg', 'private_car_127.jpg', 'private_car_128.jpg', 'private_car_129.jpg', 'private_car_13.jpg', 'private_car_130.jpg', 'private_car_131.jpg', 'private_car_132.jpg', 'private_car_133.jpg', 'private_car_134.jpg', 'private_car_135.jpg', 'private_car_136.jpg', 'private_car_137.jpg', 'private_car_138.jpg', 'private_car_139.jpg', 'private_car_14.jpg', 'private_car_140.jpg', 'private_car_141.jpg', 'private_car_142.jpg', 'private_car_143.jpg', 'private_car_144.jpg', 'private_car_145.jpg', 'private_car_146.jpg', 'private_car_147.jpg', 'private_car_148.jpg', 'private_car_149.jpg', 'private_car_15.jpg', 'private_car_150.jpg', 'private_car_151.jpg', 'private_car_152.jpg', 'private_car_153.jpg', 'private_car_154.jpg', 'private_car_155.jpg', 'private_car_156.jpg', 'private_car_157.jpg', 'private_car_158.jpg', 'private_car_159.jpg', 'private_car_16.jpg', 'private_car_160.jpg', 'private_car_161.jpg', 'private_car_162.jpg', 'private_car_163.jpg', 'private_car_164.jpg', 'private_car_165.jpg', 'private_car_166.jpg', 'private_car_167.jpg', 'private_car_168.jpg', 'private_car_169.jpg', 'private_car_17.jpg', 'private_car_170.jpg', 'private_car_171.jpg', 'private_car_172.jpg', 'private_car_173.jpg', 'private_car_174.jpg', 'private_car_175.jpg', 'private_car_176.jpg', 'private_car_177.jpg', 'private_car_178.jpg', 'private_car_179.jpg', 'private_car_18.jpg', 'private_car_180.jpg', 'private_car_181.jpg', 'private_car_182.jpg', 'private_car_183.jpg', 'private_car_184.jpg', 'private_car_185.jpg', 'private_car_186.jpg', 'private_car_187.jpg', 'private_car_188.jpg', 'private_car_189.jpg', 'private_car_19.jpg', 'private_car_190.jpg', 'private_car_191.jpg', 'private_car_192.jpg', 'private_car_193.jpg', 'private_car_194.jpg', 'private_car_195.jpg', 'private_car_196.jpg', 'private_car_197.jpg', 'private_car_198.jpg', 'private_car_199.jpg', 'private_car_2.jpg', 'private_car_20.jpg', 'private_car_200.jpg']

res = find_file_by_name(filename, folder)
print(res)  # produces ['private_car_10.jpg', 'private_car_10.png']

我在这里做的是遍历你文件夹中的文件列表。然后我将文件夹中的每个文件拆分为“。”产生一系列 [filename, extension] 的子字符串,如果文件名与函数输入匹配,我将该文件包含在列表中 return。我只使用 rsplit 和 split 一次,这样文件名就可以包含“。”字符。

查看文档:

最有效的方法是先将列表转换成字典。

import os
files = ['private_car_1.jpg', 'private_car_10.jpg', 'private_car_100.jpg', 'private_car_101.jpg', 'private_car_102.jpg', 'private_car_103.jpg'] 

di = {os.path.splitext(el)[0] : el for el in files}

print(di.get('private_car_100'))

输出:

private_car_100.jpg