比较包含染色体区域的文件和包含点坐标的另一个文件

时间:2014-03-10 19:12:57

标签: python csv comparison bioinformatics

我可以告知以下问题。我有csv文件,我想比较。第一个包含基因组中特定点的坐标(例如chr3:987654-987654)。其他csv文件包含基因组区域的坐标(例如,chr3:135596-123456789)。我想将我的第一个文件与其他文件进行交叉比较,以查看第一个文件中的任何点位置是否与其他文件中的任何区域坐标重叠,并将这组重叠写入单独的文件中。为了简单起见,我已经起草了一个简单的代码来交叉比较2个csv文件。奇怪的是,我的代码运行并打印坐标,但不会将点坐标写入单独的文件中。我的第一个问题是,如果我的方法(来自我的代码)比较这两个文件是最佳的还是有更好的方法来做到这一点?其次,为什么不写入单独的文件?

import csv

Region = open ('Region_test1.csv', 'rt', newline = '')
reader_Region = csv.reader (Region, delimiter = ',')

DMC = open ('DMC_test.csv', 'rt', newline = '')
reader_DMC = csv.reader (DMC, delimiter = ',')

DMC_testpoint = open ('DMC_testpoint.csv', 'wt', newline ='')
writer_Exon = csv.writer (DMC_testpoint, delimiter = ',')



for col in reader_Region:
    Chr_region = col[0]
    Start_region = int(col[1])
    End_region = int(col [2])
    for col in reader_DMC:
        Chr_point = col[0]
        Start_point = int(col [1])
        End_point = int(col[2])
        if Chr_region == Chr_point and Start_region <= Start_point and End_region >= End_point:
            print (True, col)
        else:
            print (False, col)
            writer_Exon.writerow(col)


Region.close()
DMC.close()

1 个答案:

答案 0 :(得分:0)

有些事情是错误的,其中最重要的是你永远不会检查文件是否成功打开。最明显的是你永远不会关闭你的作家。

那说这是一个令人难以置信的非最佳方式。文件I / O很慢。你不想以一种因子的方式继续重读所有内容。鉴于您的搜索需要所有可能的比较,您将希望将两个文件中的至少一个完全存储在内存中,如果您不希望将两个完整的数据集存储在内存中,则可能使用生成器/迭代器而不是另一个。 / p>

你已经加载了两套,继续进行交叉检查

我建议你看看http://docs.python.org/2/library/csv.html如何使用csv阅读器,因为你正在做的事情似乎没有任何意义,因为col [0],col [1]和col [2] ]不会是你认为的那样。

这些是样式和可读性的东西,但是: 一些迭代变量的名称似乎有些偏离,for col in ...应该是for token in ...,因为您正在按令牌处理令牌,而不是逐列/逐行处理等。

此外,选择一致的内容以适应变量会很好,有时你会以大写字母开头,有时你会在'_'之后保存大写字母

这是在你的对象和一些函数名称之间放置'而不是其他的也是非常奇怪的。但同样,这些都不会改变代码的功能。