【发布时间】:2019-03-28 16:51:35
【问题描述】:
我有列表和字典,现在我需要将字典中的键与列表中的键进行比较,并将匹配结果打印到 YML 文件中。 所以这是我的字典键,
samples1.keys()
dict_keys(['C3N-02289_10_L1', 'C3N-02289_10_L2', 'C3N-02671_08_L1', 'C3N-02671_08_L2','C3N-02671_10_L1','C3N-02671_10_L1' ])
我有 2 个列表,
Left_reads = [
'C3N-02289_10_L1_R1.gz',
'C3N-02289_10_L2_R1.gz',
'C3N-02671_08_L1_R1.gz',
'C3N-02671_08_L2_R1.gz',
'C3N-02671_10_L1_R1.gz',
'C3N-02671_10_L2_R1.gz'
]
Right_reads = [
'C3N-02289_10_L1_R2.gz',
'C3N-02289_10_L2_R2.gz',
'C3N-02671_08_L1_R2.gz',
'C3N-02671_08_L2_R2.gz',
'C3N-02671_10_L1_R2.gz',
'C3N-02671_10_L2_R2.gz'
]
现在我需要将字典 (samples1.key) 中的每个键与列表中的值 (Left_reads 和 Right_reads) 进行比较。如果密钥与列表中的字符串匹配,则将其打印到 YML 文件。
这是我尝试过的,
for sam in samples1.keys():
ymlFile = pat + sam + '.yml'
ymlFH = open(ymlFile, 'w')
ymlFH.write("reads1: [\n")
for sam in sorted(Left_reads):
ymlFH.write(" {class: File, path: " + path + '/' + sam + "}, \n")
ymlFH.write("]\n")
ymlFH.write("reads2: [\n")
for sam in sorted(Right_reads):
ymlFH.write(" {class: File, path: " + path + '/' + sam + "}, \n")
ymlFH.write("]\n")
ymlFH.close()
这会将列表Left_reads 和Right_reads 中的所有值打印到reads1 和reads2。
我的目标是有一个输出来打印列表中的每个值,例如,对于文件C3N-02289_10_L1.yml,输出应该是这样的,所以这里我的所有值都与C3N-02289_10_L1和C@987654333匹配@。我需要脚本来比较前缀,也就是C3N-02289_10在列表和字典之间然后写入YML文件
reads1: [
{class: File, path: /usr/path/C3N-02289_10_L1_R1.gz},
{class: File, path: /usr/path/C3N-02289_10_L2_R1.gz},
]
reads2: [
{class: File, path: /usr/path/C3N-02289_10_L1_R2.gz},
{class: File, path: /usr/path/C3N-02289_10_L2_R2.gz},
]
字典中的所有值、列表中的匹配字符串等都是相同的。
使用我上面的一段代码,C3N-02289_10_L1.yml 的输出看起来像,
reads1: [
{class: File, path: /usr/path/C3N-02289_10_L1_R1.gz},
{class: File, path: /usr/path/C3N-02289_10_L2_R1.gz},
{class: File, path: /usr/path/C3N-02671_08_L1_R1.gz},
{class: File, path: /usr/path/C3N-02671_08_L2_R.gz},
{class: File, path: /usr/path/C3N-02671_10_L1_R1.gz},
{class: File, path: /usr/path/C3N-02671_10_L2_R1.gz} ,
]
reads2: [
{class: File, path: /usr/path/C3N-02289_10_L1_R2.gz},
{class: File, path: /usr/path/C3N-02289_10_L2_R2.gz},
{class: File, path: /usr/path/C3N-02671_08_L1_R2.gz},
{class: File, path: /usr/path/C3N-02671_08_L2_R2.gz},
{class: File, path: /usr/path/C3N-02671_10_L1_R2.gz},
{class: File, path: /usr/path/C3N-02671_10_L2_R2.gz}
]
【问题讨论】:
-
什么是 YML 文件?有一种叫做 YAML 的东西,如果可能的话,你应该使用
.yaml文件扩展名 (yaml.org/faq.html)。如果您想编写那种文件,请始终使用像ruamel.yaml或PyYAML这样的 YAML 库(以防您只需要支持过时的 YAML 1.1 规范)。
标签: python-3.x list dictionary yaml