以下是我的目录的示例:
> SSSRRR2.bam SSSRRR24.bam
>
> SSSRRR2.bam.bai SSSRRR24.bam.bai
>
> SSSRRR2.split.bam SSSRRR24.split.bam
>
> SSSRRR2.ump.fastq SSSRRR24.ump.fastq
我需要的唯一文件是每个ID的.split.bam
和.bam
文件,以便应用subprocess.check\u输出。这是我编写的python脚本:
#!/usr/bin/env python
import os
import subprocess
if __name__=='__main__':
path = os.getcwd()
dir_files = os.listdir(path)
pair_reads = {}
for file in sorted(dir_files):
if file.endswith(".split.bam"):
ID_1 = file.split(".")[0]
file1 = file
if file.endswith(".bam") and not file.endswith(".split.bam") and not file.endswith(".bam.bai"):
ID_2 = file.split(".")[0]
file2 = file
if ID_1 == ID_2:
pair_reads[file1] = file2
for key, value in pair_reads.items():
# print(key)
name = key.split(".")[0]
subprocess.check_output("tepid-discover -k -d -i --strict -D -p 36 -n " + name + " -c " + key + " s " + value, shell = True)
然而,我的问题是应用循环时的缩进。如果if
的每个块彼此独立,我如何向这两个块引入连接,例如在这个块中:
if ID_1 == ID_2:
pair_reads[file1] = file2
这是我得到的错误:
if ID_1 == ID_2:
NameError: name 'ID_1' is not defined
另外,我使用python2是因为该程序与python2一起工作。
提前感谢您的帮助。我希望我说清楚了
在循环的一次迭代中,只能定义
ID_1
和ID_2
中的一个,因为它一次只查看一个文件,并且这两个条件是互斥的这个问题有两个简单的解决方案:您可以给出
ID_1
和ID_2
默认值,或者您可以在检查它们是否相同之前添加另一个条件(例如,“如果两个ID都定义了和,那么它们是相同的”)但是,这可能无法使程序正常工作,因为
os.listdir
可能会以与预期不同的顺序列出文件最简单的解决方案可能是只查看
.split.bam
文件或文件.bam
,然后自己构建另一个文件这将查找每个
.split.bam
文件,并在运行最后一行之前检查相应的.bam
文件是否存在这似乎与缩进无关。您的程序没有运行第一个if语句。我不知道你想做什么,但是你可以把这个比较嵌套在
相关问题 更多 >
编程相关推荐