Python - 来自txt文件的字符串输入的比较

时间:2015-09-03 19:15:28

标签: python string string-comparison

我似乎在比较python中的字符串方面遇到了一个小问题。我是从文本文件中读入,然后一次比较三个字符。似乎总是认为第一个" if"声明是否正确让我感到困惑。 (请注意,输入作为测试打印在循环中,并提供正确的字符串进行比较)。感谢您的任何帮助/建议:)

文本文件输入:

  

ACATTTGCTTCTGACACAACTGTGTTCACTAGCAACCTCAAACAGACACCATGGTGCATCTGACTCCTGa   GGAGAAGTCTGCCGTTACTGCCCTGTGGGGCAAGGTGAACGTGGATGAAGTTGGTGGTGAGGCCCTGGGC   AGGCTGCTGGTGGTCTACCCTTGGACCCAGAGGTTCTTTGAGTCCTTTGGGGATCTGTCCACTCCTGATG   CTGTTATGGGCAACCCTAAGGTGAAGGCTCATGGCAAGAAAGTGCTCGGTGCCTTTAGTGATGGCCTGGC   TCACCTGGACAACCTCAAGGGCACCTTTGCCACACTGAGTGAGCTGCACTGTGACAAGCTGCACGTGGAT   CCTGAGAACTTCAGGCTCCTGGGCAACGTGCTGGTCTGTGTGCTGGCCCATCACTTTGGCAAAGAATTCA   CCCCACCAGTGCAGGCTGCCTATCAGAAAGTGGTGGCTGGTGTGGCTAATGCCCTGGCCCACAAGTATCA   CTAAGCTCGCTTTCTTGCTGTCCAATTTCTATTAAAGGTTCCTTTGTTCCCTAAGTCCAACTACTAAACT   GGGGGATATTATGAAGGGCCTTGAGCATCTGGATTCTGCCTAATAAAAAACATTTATTTTCATTGC

infile = open('DNA.txt', 'r')

while True:
    line = infile.readline()
    if not line: break
    a = []
    for i in range (0, len(line), 3):
        DNA = line[i:i+3]
        print DNA

        if DNA == 'ATT' or 'ATC' or 'ATA':
            a.append('I')

        elif DNA == 'CTT' or 'CTC' or 'CTA' or 'CTG' or 'TTA' or 'TTG':
            a.append('L')

        elif DNA == 'GTT' or 'GTC' or 'GTA' or 'GTG':
            a.append('V')

        elif DNA == 'TTT' or 'TTC':
            a.append('F')

        elif DNA == 'ATG':
            a.append('M')

        else:
            a.append('X')

    print str(a)

输出:

ACA
TTT
GCT
TCT
GAC
ACA
ACT
GTG
TTC
ACT
AGC
AAC
CTC
AAA
CAG
ACA
CCA
TGG
TGC
ATC
TGA
CTC
CTG
a

['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']

GGA
GAA
GTC
TGC
CGT
TAC
TGC
CCT
GTG
GGG
CAA
GGT
GAA
CGT
GGA
TGA
AGT
TGG
TGG
TGA
GGC
CCT
GGG
C

['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']

AGG
CTG
CTG
GTG
GTC
TAC
CCT
TGG
ACC
CAG
AGG
TTC
TTT
GAG
TCC
TTT
GGG
GAT
CTG
TCC
ACT
CCT
GAT
G

['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']

CTG
TTA
TGG
GCA
ACC
CTA
AGG
TGA
AGG
CTC
ATG
GCA
AGA
AAG
TGC
TCG
GTG
CCT
TTA
GTG
ATG
GCC
TGG
C

['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']

TCA
CCT
GGA
CAA
CCT
CAA
GGG
CAC
CTT
TGC
CAC
ACT
GAG
TGA
GCT
GCA
CTG
TGA
CAA
GCT
GCA
CGT
GGA
T

['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']

CCT
GAG
AAC
TTC
AGG
CTC
CTG
GGC
AAC
GTG
CTG
GTC
TGT
GTG
CTG
GCC
CAT
CAC
TTT
GGC
AAA
GAA
TTC
A

['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']

CCC
CAC
CAG
TGC
AGG
CTG
CCT
ATC
AGA
AAG
TGG
TGG
CTG
GTG
TGG
CTA
ATG
CCC
TGG
CCC
ACA
AGT
ATC
A

['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']

CTA
AGC
TCG
CTT
TCT
TGC
TGT
CCA
ATT
TCT
ATT
AAA
GGT
TCC
TTT
GTT
CCC
TAA
GTC
CAA
CTA
CTA
AAC
T

['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']

GGG
GGA
TAT
TAT
GAA
GGG
CCT
TGA
GCA
TCT
GGA
TTC
TGC
CTA
ATA
AAA
AAC
ATT
TAT
TTT
CAT
TGC
['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']

2 个答案:

答案 0 :(得分:3)

它始终评估为I,因为

if DNA == 'ATT' or 'ATC' or 'ATA':

始终评估为True

相当于:

if (DNA == 'ATT') or ('ATC') or ('ATA'):

'ATC'的真值是总是为真,因此结果。

你可以这样检查:

if DNA in ['ATT', 'ATC', 'ATA']:

其他if条款也是如此。

另外,请注意所有这些逻辑:

infile = open('DNA.txt', 'r')

while True:
    line = infile.readline()
    if not line: break

可以替换为

with open('DNA.txt', 'r')  as infile:
    for line in infile:

另外,另一种方法是使用字典映射和查找。这样,您可以简化所有if逻辑..示例:

dna_dict = {
    'ATT': 'I',
    'ATC': 'I',
    'ATA': 'I',
    ....
}

然后:

a.append(dna_dict.get(DNA, 'X'))

答案 1 :(得分:2)

这种方式更具可读性

with open('file.txt') as f:
    data = f.readlines()

for line in data:
    if not line:
        continue
    a = []
    segment = [line[i:i+3] for i in range(0, len(line), 3)]
    for dna in segment:
        if dna in ['ATT', 'ATC', 'ATA']:
            a.append('I')
        elif dna in ['CTT', 'CTC', 'CTA', 'CTG', 'TTA', 'TTG']:
            a.append('L')
        elif dna in ['GTT', 'GTC', 'GTA', 'GTG']:
            a.append('V')
        elif dna in ['TTT', 'TTC']:
            a.append('F')
        elif dna in ['ATG']:
            a.append('M')
        else:
            a.append('X')
    print a