我在目录中有三个文件,我希望它们与要字典的字符串列表匹配。
dir
中的文件如下所示,
DB_ABC_2_T_bR_r1_v1_0_S1_R1_001_MM_1.faq.gz
DB_ABC_2_T_bR_r1_v1_0_S1_R2_001_MM_1.faq.gz
DB_DEF_S1_001_MM_R1.faq.gz
DB_DEF_S1_001_MM_R2.faq.gz
list
的文件名的一部分为
ABC
DEF
这就是我尝试过的,
import os
import re
dir='/user/home/files'
list='/user/home/list'
samp1 = {}
samp2 = {}
FH_sample = open(list, 'r')
for line in FH_sample:
samp1[line.strip().split('\n')[0]] =[]
samp2[line.strip().split('\n')[0]] =[]
FH_sample.close()
for file in os.listdir(dir):
m1 =re.search('(.*)_R1', file)
m2 = re.search('(.*)_R2', file)
if m1 and m1.group(1) in samp1:
samp1[m1.group(1)].append(file)
if m2 and m2.group(1) in samp2:
samp2[m2.group(1)].append(file)
我希望上面的脚本从m1和m2中找到匹配项,并将它们收集在字典samp1
和samp2
中。但是以上脚本未在if loop
中找到匹配项。现在samp1
和samp2
为空。
这是samp1
和samp2
的输出结果:
{'ABC': [DB_ABC_2_T_bR_r1_v1_0_S1_R1_001_MM_1.faq.gz, DB_ABC_2_T_bR_r1_v1_0_S1_R2_001_MM_1.faq.gz], 'DEF': [DB_DEF_S1_001_MM_R1.faq.gz, DB_DEF_S1_001_MM_R2.faq.gz]}
任何帮助将不胜感激
答案 0 :(得分:2)
您可能不需要很多此代码。您只能看到您从list
获得的子字符串是否为in
dir
。
在下面的代码中,我将数据读为列表。您似乎已经完成了此操作,因此只需将files
替换为从dir
读取的文件名,然后将st
替换为{{1}的子字符串}(您不应将其用作变量名,因为它实际上已在Python中用于其他用途)。
list
答案 1 :(得分:1)
您可以将dict传递给python脚本,并提供id_list,然后将id_list添加为dict键,如果dict键位于fastq_filename中,则附加fastqs:
import os
import sys
dir_path = sys.argv[1]
fastqs=[]
for x in os.listdir(dir_path):
if x.endswith(".faq.gz"):
fastqs.append(x)
id_list = ['MOHUA', 'MSJLF']
sample_dict = dict((sample,[]) for sample in id_list)
print(sample_dict)
for k in sample_dict:
for z in fastqs:
if k in z:
sample_dict[k].append(z)
print(sample_dict)
运行:
python3.6 fq_finder.py /path/to/fastqs
从上面的输出以显示正在发生的事情:
{'MOHUA': [], 'MSJLF': []} # first print creates dict with empty list as vals for keys
{'MOHUA': ['BSSE_QGF_1987_HJUS_1_MOHUA_2_T_bR_r1_v1_0_S1_R1_001_MM_1.faq.gz', 'BSSE_QGF_1967_HJUS_1_MOHUA_2_T_bR_r1_v1_0_S1_R2_001_MM_1.faq.gz'], 'MSJLF': ['BSSE_QGF_18565_H33HLAFXY_1_MSJLF_T_bulk_RNA_S1_R2_001_MM_1.faq.gz', 'BSSE_QGF_18565_H33HLAFXY_1_MSJLF_T_bulk_RNA_S1_R1_001_MM_1.faq.gz']}