使用python搜索坐标范围

时间:2013-08-06 09:11:57

标签: python file find compare

我是一名python初学者,非常感谢有关如何构建脚本的建议。我并不熟悉如何使脚本具有计算效率,这对我当前的任务很重要,因为它将查看大文本文件。 (fyi它的遗传坐标和vcf格式文件)

我有两个文件。 File1是一个以制表符分隔的数字排序坐标/位置列表,例如

chr1 100
chr1 200
chr1 300
chr2 10
chr2 300
chr2 500

File2是一个以制表符分隔的坐标列表,其中包含更多信息,例如

chr1 10 0/1 1/1 0/1 0/0
chr1 100 0/0 1/1 0/0 0/0
chr1 200 0/0 1/1 0/0 0/0
chr1 300 0/0 0/1 0/0 0/0
chr2 10 0/1 1/1 0/1 0/0

file1中的所有位置都在file2中,但文件2也包含其他位置。

对于file1中的每个位置,我想搜索file2并找到该位置。然后,棘手的位(至少对我而言)是我然后想要查看数字上的所有位置(第2列)< =小于该位置的100个位置和大于该位置的< = 100个位置。因此,如果file1中的位置是chr3 200,我想找到文件2中chr3 100和chr3 300之间的所有位置。(它也必须是第1列中的相同值。所以如果position是chr2 30我不想要一旦达到chr2 0,它就会向后回到chr1中的值。)对于符合这些条件的每个位置,我会将所有位于这些位置的值(我可以自己做的那部分)加起来,然后输出它们作为得分。 file1中指定的位置。

所以我需要帮助的是如何从文件1读入每个位置,在file2中找到该位置,然后在文件2中先前返回100个位置并开始读取file2中100个以内的所有位置位置越来越大的文件1中指定的位置。然后,一旦完成,输出该站点的值,然后继续读取file1中的下一个位置并执行相同的操作。

这是我迄今为止设法完成的代码结构的一个粗略示例:

file1 =  open('positions.txt', 'w')
file2 =  open('file2.vcf', 'w')
output =   open('output.txt', 'w')

#structure:

for line in file1:
    line = line.rstrip() 
    fields = line.split("\t")
    startposition = fields[0:1]

    for line in file2:
        line = line.rstrip() 
        fields = line.split("\t")

        if fields[0:1] = startposition:
            keep going back in file2 until fields[1] < (startposition[1] - 100)
            read next line (where fields[1] is >= startposition[1] - 100)
            storeddata += fields [2:5]

            continue for lines in file2 until fields[1] > (startposition[1] + 100)
                print >> output, str(startposition), "\t", str(storeddata)

我很感激有关如何构建该示例代码的任何意见。

如果有任何我需要澄清的话,请告诉我。

提前感谢您的帮助!

最好的问候。

0 个答案:

没有答案