python 高效查找未知扩展名的文件

dgjrabp2  于 2023-01-04  发布在  Python
关注(0)|答案(1)|浏览(142)

我有一个问题,感觉很容易,但我不能拿出一个令人满意的解决方案。
我有一个文件结构,目录中包含了非常多的文件。文件名只是它们的索引,扩展名未知。例如,第10个文件是“10. pdf”,第42个文件是“42. png”。可以有很多不同的扩展名。
我需要从python中访问第i个文件,给定索引i,但不知道扩展名,这种情况经常发生,所以我应该能够高效地完成它。
以下是我可以想到的部分解决方案:
1.我可以glob模式f"{i}.*"但是,我认为glob会检查目录中的每个文件,这对于大量文件来说会非常慢。
1.我可以保存和预加载完整的名称在一个dict,在一个JSON文件,如{..., 10: "10.pdf", ...}这工作,但我必须加载和跟踪另一个沉重的对象。
1.如果我有一个所有允许的扩展名的列表,我可以测试所有的可能性。这感觉很奇怪,也没有必要,但这是我目前最好的猜测。
你觉得怎么样?这些建议中有一个是正确的吗?

tcomlyy6

tcomlyy61#

正如我所想,你只需要文件名,而不是完整的文件名+扩展名。所以,一种方法是从文件中删除扩展名,例如:

import os
path = r"Enter your folder's path here"
file_dict = {}

for file in os.listdir(path):
    if os.path.isfile(file): # because os.listdir return both files and folders
        file_name, ext = os.path.splitext(file)
        print(file_name, ext)

例如,如果您的文件是'10.pdf',则file_name ='10'和ext ='. pdf',然后您可以将其添加到字典中以备将来使用:

file_dict[file_name] = os.path.join(path, file)

另一种方法是使用正则表达式或“re”!如果你有一个模式(甚至是复杂的模式),“re”是很棒的!你需要输入你想要的模式,例如:

import os
import re
path = r"Enter your folder's path here"
file_dict = {}

for file in os.listdir(path):
    if os.path.isfile(file):
        mo = re.search(r'(.*\)(..*)', file)
        file_name, ext = mo.groups()
        print(file_name, ext)

相关问题