为什么我用同样的脚本得到结果?

2024-09-29 19:22:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的脚本(见下文),但是我从两个txt文件中得到了两个不同的结果。第一个txt文件包含五个序列,第二个txt文件包含第一个文件中存在的单个序列

第一个文件中的序列:

克列斯尔

RVRFFFPSL

QVHPQKVT

SLDDYNHLV

赫夫吉斯维克

第一个文件中的序列:

克列斯尔

注:序列klsequesll在上述两个文件中都是通用的

代码:

with open('file.txt', 'r') as f:

    for my_kmer in f:

        KARP850103 = {'A': 0.892, 'L': 0.921, 'R': 0.901, 'K': 1.057, 'N': 0.930,
                      'M': 0.804, 'D': 0.932, 'F': 0.914, 'C': 0.925, 'P': 0.932,
                      'Q': 0.885, 'S': 0.923, 'E': 0.933, 'T': 0.934, 'G': 0.923,
                      'W': 0.803, 'H': 0.894, 'Y': 0.837, 'I': 0.872, 'V': 0.913}
        BUNA790102 = {'A': 4.349, 'L': 4.385, 'R': 4.396, 'K': 4.358, 'N': 4.755,
                      'M': 4.513, 'D': 4.765, 'F': 4.663, 'C': 4.686, 'P': 4.471,
                      'Q': 4.373, 'S': 4.498, 'E': 4.295, 'T': 4.346, 'G': 3.972,
                      'W': 4.702, 'H': 4.630, 'Y': 4.604, 'I': 4.224, 'V': 4.184}
        VINM940101 = {'A': 0.984, 'L': 0.935, 'R': 1.008, 'K': 1.102, 'N': 1.048,
                      'M': 0.952, 'D': 1.068, 'F': 0.915, 'C': 0.906, 'P': 1.049,
                      'Q': 1.037, 'S': 1.046, 'E': 1.094, 'T': 0.997, 'G': 1.031,
                      'W': 0.904, 'H': 0.950, 'Y': 0.929, 'I': 0.927, 'V': 0.931}
        KARP850102 = {'A': 0.946, 'L': 0.961, 'R': 1.028, 'K': 1.082, 'N': 1.006,
                      'M': 0.862, 'D': 1.089, 'F': 0.912, 'C': 0.878, 'P': 1.085,
                      'Q': 1.025, 'S': 1.048, 'E': 1.036, 'T': 1.051, 'G': 1.042,
                      'W': 0.917, 'H': 0.952, 'Y': 0.930, 'I': 0.892, 'V': 0.927}
        KARP850101 = {'A': 1.041, 'L': 0.967, 'R': 1.038, 'K': 1.093, 'N': 1.117,
                      'M': 0.947, 'D': 1.033, 'F': 0.930, 'C': 0.960, 'P': 1.055,
                      'Q': 1.165, 'S': 1.169, 'E': 1.094, 'T': 1.073, 'G': 1.142,
                      'W': 0.925, 'H': 0.982, 'Y': 0.961, 'I': 1.002, 'V': 0.982}
        ANDN920101 = {'A': 4.35, 'L': 4.17, 'R': 4.38, 'K': 4.36, 'N': 4.75,
                      'M': 4.52, 'D': 4.76, 'F': 4.66, 'C': 4.65, 'P': 4.44,
                      'Q': 4.37, 'S': 4.50, 'E': 4.29, 'T': 4.35, 'G': 3.97,
                      'W': 4.70, 'H': 4.63, 'Y': 4.60, 'I': 3.95, 'V': 3.95}
        FASG760104 = {'A': 9.69, 'L': 9.60, 'R': 8.99, 'K': 9.18, 'N': 8.80,
                      'M': 9.21, 'D': 9.60, 'F': 9.18, 'C': 8.35, 'P': 10.64,
                      'Q': 9.13, 'S': 9.21, 'E': 9.67, 'T': 9.10, 'G': 9.78,
                      'W': 9.44, 'H': 9.17, 'Y': 9.11, 'I': 9.68, 'V': 9.62}

        aaindex_values = []
        aaindex_listT = [VINM940103, VINM940104, VINM940102, KARP850103, BUNA790102, VINM940101, 
                        KARP850102, KARP850101, ANDN920101, FASG760104]
        for i in aaindex_listT:
            a_a = (my_kmer.count("A") * i["A"])
            c_c = (my_kmer.count("C") * i["C"])
            d_d = (my_kmer.count("D") * i["D"])
            e_e = (my_kmer.count("E") * i["E"])
            f_f = (my_kmer.count("F") * i["F"])
            g_g = (my_kmer.count("G") * i["G"])
            h_h = (my_kmer.count("H") * i["H"])
            i_i = (my_kmer.count("I") * i["I"])
            k_k = (my_kmer.count("K") * i["K"])
            l_l = (my_kmer.count("L") * i["L"])
            m_m = (my_kmer.count("M") * i["M"])
            n_n = (my_kmer.count("N") * i["N"])
            p_p = (my_kmer.count("P") * i["P"])
            q_q = (my_kmer.count("Q") * i["Q"])
            r_r = (my_kmer.count("R") * i["R"])
            s_s = (my_kmer.count("S") * i["S"])
            t_t = (my_kmer.count("T") * i["T"])
            v_v = (my_kmer.count("V") * i["V"])
            w_w = (my_kmer.count("W") * i["W"])
            y_y = (my_kmer.count("Y") * i["Y"])

            aaindex_comp = round(((a_a + c_c + d_d + e_e + f_f + g_g + h_h + i_i + k_k + l_l + m_m + n_n 
                                   + p_p + q_q + r_r + s_s + t_t + v_v + w_w + y_y)/len(my_kmer)), 3)

            aaindex_values.append(aaindex_comp)

        print(aaindex_values)

在这两种情况下,KLSequesll序列的结果不同

疑问: 为什么结果不同


Tags: 文件intxtformycount序列values
1条回答
网友
1楼 · 发布于 2024-09-29 19:22:14

您没有考虑换行符(\n和可能出现在行尾的\r)。如果对文件的行进行迭代,将得到这些字符。例如,假设我有以下文件(file.txt):

foo
bar
blah

如果我跑

with open('file.txt','r') as f:
    lines=[line for line in f]

lines的元素将是'foo\n''bar\n''blah'。请注意,最后一行没有换行符,因为它是最后一行

当您从第一个文件读入klsequesll时,它不是最后一行,因此它的末尾将有一个'\n'。这在计算len(my_kmer)时很重要

在第二个文件中,klsequesll是最后一行,因此末尾没有换行符使len(my_kmer)不同

你应该做的是:

with open('file.txt', 'r') as f:
    for my_kmer in f:
        my_kmer = my_kmer.rstrip()
        ...

除其他外,这将去除任何换行符

相关问题 更多 >

    热门问题