如何迭代两个文件并打印它们的差异并显示位置

时间:2017-10-03 21:19:21

标签: python python-2.7

我编写了这个程序,我将两个不同的DNA序列存储在两个不同的文件中。我将DNA序列进行比较,看看哪些字符不同,哪些字符不同。 这是我到目前为止的代码,但我没有得到我想要的输出。

   WildDNAf = raw_input("Enter Wild DNA file: " )
   wildDNA = open(WildDNAf).read()
   MutDNAf = raw_input("Enter Mut DNA file: ")
   mutDNA = open (MutDNAf).read()


   dnacount = 0
   for i in range(len(wildDNA)):
       if wildDNA[i] != mutDNA:
           print i + 1 , wildDNA[i], mutDNA[i]
          dnacount = dnacount +1
   print "There are", dnacount, "Mutations"

这就是我得到的:

There are 2589 Mutations
2590 T T
There are 2590 Mutations
2591 T T
There are 2591 Mutations
2592 G T
There are 2592 Mutations
2593 A G
There are 2593 Mutations
2594 A A
There are 2594 Mutations

我试图获得一个输出,显示两个序列之间发现的任何突变的列表以及发现突变的位置。 可以在https://uploadfiles.io/wpuey https://ufile.io/dzzvi

中找到DNA序列的文件

1 个答案:

答案 0 :(得分:2)

我认为问题就在于这一行,它将wildDNA的单个字符与mutDNA中的整个字符串进行比较。

if wildDNA[i] != mutDNA:

你可能想要这个,它将比较每个(在同一个索引处)的单个字符。

if wildDNA[i] != mutDNA[i]:

还要确保缩进正确。由于缩进,您分享的内容不是有效的Python,并且您的输出让我认为print语句在循环内部,即使您共享的代码将其置于循环之外。

<强>更新

带输出的完整工作代码(Python 3.x):

def read_dna_file(filename):
    with open(filename, 'rt') as f:
        return ''.join(line.strip() for line in f.readlines()[1:])

a = read_dna_file('wild.fasta')
b = read_dna_file('mut.fasta')

assert len(a) == len(b)

count = 0

for i in range(len(a)):
    if a[i] != b[i]:
        print(i, a[i], b[i])
        count += 1

print("There are {} mutations.".format(count))

# Output:
# 0 T A
# 87 A G
# 88 A G
# 1307 G C
# 2367 T C
# There are 5 mutations.

请注意,每个文件的顶部都包含不同内容(不同长度)的行。因此,在尝试逐个字符比较之前,您需要跳过它,否则文件中的几乎所有内容都将无法匹配。我的read_dna_file函数跳过第一行,然后忽略文件中的换行符。