Поиск файла с частью его имени и добавление в словарь

#python #dictionary #os.walk

#python #словарь #os.walk

Вопрос:

Всем привет, у меня есть файлы, сохраненные в определенном каталоге.

 dir ="/user/raw/samples"
  

И мне нужно, чтобы все файлы заканчивались определенной строкой в словаре dic_x , а другие — в словаре dic_z .

Вот имена файлов в dir :

 SAP_XCV_1980_H7LYVDRXX_2_ALPH_C_cR_c1_v1_0_FCDSSA_DDDD_S14_L002_R1_001_MM_1.fz.gz
SAP_XCV_1980_H7LYVDRXX_2_ALPH_C_cR_c1_v1_0_FCDSSA_DDDD_S14_L002_R2_001_MM_1.fz.gz
SAP_XCV_1980_H7LYVDRXX_2_ALPH_C_cR_c1_v1_0_FCDSSA_DDDD_S14_L001_R2_001_MM_1.fz.gz
SAP_XCV_1980_H7LYVDRXX_2_ALPH_C_cR_c1_v1_0_FCDSSA_DDDD_S14_L001_R1_001_MM_1.fz.gz
  

И у меня есть два словаря

  import sys
import os
import subprocess
import glob
import fnmatch
import re
    listF = ['ALPH']
    FH_sample = listF
    dic_x = {}
    dic_z = {}

    for line in FH_sample:
        dic_x[line.strip().split('n')[0]] =[]
        dic_z[line.strip().split('n')[0]] =[]

        for root, sub, file in os.walk(dir):
            for name in file:
                if name.endswith(".fz.gz"):
                    m1 = re.search('(.*)_R1', file)
                    m2 = re.search('(.*)_R2', file)
                if m1 and m1.group(1) in dic_x:
                    dic_x[m1.group(1)].append(file)
                if m2 and m2.group(1) in dic_z:
                    dic_z[m2.group(1)].append(file)
  

Однако я не могу получить все значения внутри словаря с помощью приведенных выше строк кода. Мне нужны словари, подобные следующим,

 dic_x = {'ALPH': ['SAP_XCV_1980_H7LYVDRXX_2_ALPH_C_cR_c1_v1_0_FCDSSA_DDDD_S14_L001_R1_001_MM_1.fz.gz','SAP_XCV_1980_H7LYVDRXX_2_ALPH_C_cR_c1_v1_0_FCDSSA_DDDD_S14_L002_R1_001_MM_1.fz.gz']}

dic_z = {'ALPH': ['SAP_XCV_1980_H7LYVDRXX_2_ALPH_C_cR_c1_v1_0_FCDSSA_DDDD_S14_L001_R2_001_MM_1.fz.gz','SAP_XCV_1980_H7LYVDRXX_2_ALPH_C_cR_c1_v1_0_FCDSSA_DDDD_S14_L002_R2_001_MM_1.fz.gz']}
  

В настоящее время dic_x и dic_z выглядит следующим образом,

 dic_z = {'ALPH': []}
dic_x = {'ALPH': []}
  

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

1. Почему вы не смогли получить все значения в словарях У вас есть другие варианты имен этих файлов?

2. Что такое samples1, samples2 и что вы имеете в виду «не удается получить все значения внутри словаря»? Что на самом деле содержат dic_x и dic_z после запуска вашего кода?

3. @tobifascI отредактировал мой вопрос,

Ответ №1:

Вы можете использовать list

 import os
import fnmatch
path = "test_images/"
x_list = ([f for f in os.listdir(path) if fnmatch.fnmatch(f, "*.png")])
z_list= ([f for f in os.listdir(path) if fnmatch.fnmatch(f, "*.bmp")])
dic_x = {'ALPH' : x_list }
dic_z = {'ALPH': z_list}
  

В вашем случае вы можете заменить *.png на *R1_001_MM_1.fz.gz и *.bmp на *R2_001_MM_1.fz.gz' . Также test_images/ с /user/raw/samples/

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

1. Здравствуйте и спасибо за вашу попытку, но я не понял, что вы подразумеваете под файлами, file2 здесь?

2. Я попробовал решение, оно не создает словарь автоматически. Потому что у меня больше примеров, и этот способ более жестко закодирован