Перебирайте имена файлов с любым цифровым номером в Python

#python-3.x

#python-3.x

Вопрос:

Допустим, у меня есть 3 файла в моей папке / path1 / :

 fb.1.1_cluster_0003_model
fb.2.2_cluster_0001_model
fb.1.5_cluster_0002_model
  

И я хотел бы открыть каждый из них в зависимости от списка:

 liste = ["cluster_0001","cluster_0003","cluster_0002"]
  

итак, что-то вроде :

 for i in liste: 
    file = open("/path1/fb.[0-1].[0-1]_" i "_model")
  

но я не знаю, как справиться с тем фактом, что number.number может измениться в любое время и отличаться в каждом i.

У кого-нибудь есть идея? Спасибо.

Ответ №1:

Используя регулярное выражение.

Пример:

 import re
import os

#os.listdir(Your_path)
dir_list = ["fb.1.1_cluster_0003_model", "fb.2.2_cluster_0001_model", "fb.1.5_cluster_0002_model"]
liste = ["cluster_0001","cluster_0003","cluster_0002", "cluster_0000"]

pattern = "("   "|".join(liste)   ")"
for filename in dir_list:
    if re.search(pattern, filename):
        with open(os.path.join("path1", filename)) as infile:
            data = infile.read()
  

Комментарии:

1. Здравствуйте, у меня нет доступа к dir_list это просто пример, number.number изменится в любое время.

Ответ №2:

Вы можете поместить только номер в список (может быть полезно, если вы хотите использовать диапазон, например) и сопоставить их с регулярным выражением:

 import re
import os

dir_list = ["fb.1.1_cluster_0003_model", "fb.2.2_cluster_0001_model", "fb.1.5_cluster_0002_model"]
liste = ["0001","0003","0002","0000"]

reg = re.compile("cluster_(?P<cluster_num>d )_model")
for filename in dir_list:
    match = reg.search(filename).groupdict()
    if 'cluster_num' in match.keys():
        if match['cluster_num'] in liste:
            with open(os.path.join("path1", filename)) as infile:
                data = infile.read()