【问题标题】:How save multiples values into a csv file?如何将多个值保存到 csv 文件中?
【发布时间】:2020-08-10 12:08:51
【问题描述】:

我有一个代码,它返回从短蛋白质序列计算的不同值,但是当我尝试将这些值保存在 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

【问题讨论】:

  • 像文档中一样以追加模式打开文件。
  • aaindex_values 只会有一个元素,因此for i in aaindex_listT: 只会迭代一次。最后的for j in aaindex_values:循环也只迭代一次,但即使它重复了多次,每次都会覆盖前一个文件。
  • 不是machine-learning 问题,请不要向无关标签发送垃圾邮件(已删除)。

标签: python python-3.x file csv


【解决方案1】:

通过将with open() 块放在for 循环中,您每次写入一行时都会关闭然后重新打开文件。当您以写入模式 ('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])

但更简洁的方法是将所有文件逻辑移出循环,因此您无需多次关闭和重新打开文件、创建多个 csv 写入器等:

import csv  

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2023-03-24
    • 2021-11-23
    • 2020-11-04
    • 1970-01-01
    相关资源
    最近更新 更多