Как сохранить кратные значения в CSV-файл? - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть код, который возвращает разные значения, вычисленные по коротким белковым последовательностям, однако, когда я пытался сохранить их в файле csv, сохраняется только последнее значение. Как я могу сохранить их все?

Мой код:

with open('seq.txt', 'r') as f:
    for sequence in f:
        import random

        molDes_01 = {'A': random.uniform(-1.0, 1.0), 'L': random.uniform(-1.0, 1.0),
                     'R': random.uniform(-1.0, 1.0), 'K': random.uniform(-1.0, 1.0),
                     'N': random.uniform(-1.0, 1.0), 'M': random.uniform(-1.0, 1.0),
                     'D': random.uniform(-1.0, 1.0), 'F': random.uniform(-1.0, 1.0),
                     'C': random.uniform(-1.0, 1.0), 'P': random.uniform(-1.0, 1.0),
                     'Q': random.uniform(-1.0, 1.0), 'S': random.uniform(-1.0, 1.0),
                     'E': random.uniform(-1.0, 1.0), 'T': random.uniform(-1.0, 1.0),
                     'G': random.uniform(-1.0, 1.0), 'W': random.uniform(-1.0, 1.0),
                     'H': random.uniform(-1.0, 1.0), 'Y':random.uniform(-1.0, 1.0),
                     'I': random.uniform(-1.0, 1.0), 'V': random.uniform(-1.0, 1.0)}

        aaindex_values = []
        aaindex_listT = [molDes_01]
        for i in aaindex_listT:
            a_a = sequence.count("A") * i["A"]
            c_c = sequence.count("C") * i["C"]
            d_d = sequence.count("D") * i["D"]
            e_e = sequence.count("E") * i["E"]
            f_f = sequence.count("F") * i["F"]
            g_g = sequence.count("G") * i["G"]
            h_h = sequence.count("H") * i["H"]
            i_i = sequence.count("I") * i["I"]
            k_k = sequence.count("K") * i["K"]
            l_l = sequence.count("L") * i["L"]
            m_m = sequence.count("M") * i["M"]
            n_n = sequence.count("N") * i["N"]
            p_p = sequence.count("P") * i["P"]
            q_q = sequence.count("Q") * i["Q"]
            r_r = sequence.count("R") * i["R"]
            s_s = sequence.count("S") * i["S"]
            t_t = sequence.count("T") * i["T"]
            v_v = sequence.count("V") * i["V"]
            w_w = sequence.count("W") * i["W"]
            y_y = sequence.count("Y") * i["Y"]

            values = (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(sequence)
            aaindex_values.append(values)

            for j in aaindex_values:
                import csv

                with open('process.csv', 'w', newline='') as file:
                    writer = csv.writer(file)
                    writer.writerow([j])

Содержимое файла 'seq.txt' состоит из нескольких коротких последовательностей, см. Ниже:

CVCVKTTSLVRPRHI
GLNGPDIYKGUYQFK
RRKKLAALPLVLAAP
RWRWRWRW
RWRWRWRWRW
SDDPKESEGDLHCVC
ALNTLVKQLSSNFGAISSVLNDILSRLDKVEAEVQIDRL

1 Ответ

2 голосов
/ 27 апреля 2020

Помещая блок with open() в поле для l oop, вы закрываете, а затем снова открываете файл каждый раз, когда пишете строку. Когда вы открываете файл в режиме записи ('w'), он удаляет все, что уже было в файле. Это означает, что ваш код пишет каждую строку, но затем удаляет только что написанное, как только переходит к следующей строке.

Один из способов исправить это - использовать 'a' вместо 'w', чтобы открыть файл в режиме добавления вместо режима записи:

import csv  # No need to import this multiple times inside the loop   

for j in aaindex_values:
    with open('process.csv', 'a', newline='') as file:
        writer = csv.writer(file)
        writer.writerow([j])

Но гораздо более чистый способ - переместить все файлы logi c за пределы l oop, поэтому вам не нужно чтобы закрыть и открыть файл несколько раз, создайте несколько писателей csv и т. д. c:

import csv  

with open('process.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    for j in aaindex_values:
        writer.writerow([j])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...