【问题标题】:Python- how do I get output written into a single column of a CSV file?Python-如何将输出写入 CSV 文件的单列?
【发布时间】:2018-03-30 01:53:40
【问题描述】:

我编写了一个脚本,该脚本将根据来自文件的输入计算给定气氛的反应速率。脚本中运行良好的那部分——我遇到的问题是输出。

我正在尝试编写的输出如下所示:

[4.0645563275808397e+40, 2.132787340925467e+34, 1.1095439676449723e+34, 8.8519070848594178e+30, 5.712962894343884e+29, 8.59176710723335e+25, 2.2776609537205616e+27, 1.0754560423907579e+29, 1.207315366535562e+32, 3.704635984045113e+37, 3.6601067774637497e+36, 2.9774080573246763e+41, 1.6013846123116079e+42, 68756936.415690869, 37101276694.104965, 1261680029767.3533,...]

总共有 560 个反应速率。

我一直在尝试使用 csv.writer 将其写入 csv 文件 - 它可以并且确实可以做到。问题不是创建一列 560 行来存储输出,而是 csv.writer 继续生成 560 列和一行。如何让它以我想要的格式写入输出?我已经尝试过 numpy.transpose,但没有任何效果。

以下是相关代码:

rate_list=[]
for i in range (1,560): 
    A_no=int(Ar.iloc[i]) #index number for first reactant
    B_no=int(Br.iloc[i]) #index number for second reactant
    k=mydict['variable']['k'][i][29] #Grabs reaction rate constant
    A_ymix=mydict['variable']['ymix'][29][A_no] #Grabs abundance for first reactant
    B_ymix=mydict['variable']['ymix'][29][B_no] #Grabs abundance for second reactant
    rate=A_ymix*B_ymix*N*k
    rate_list.append(rate)
with open('reaction rate list.csv','w') as output:
     writer= csv.writer(output, delimiter=',')
writer.writerows(rate_list)

我们将不胜感激任何和所有建议!

谢谢!

【问题讨论】:

    标签: python csv


    【解决方案1】:

    没有关于 ar、BR、mydict 等的详细信息,因此我创建了一个大数字的 moc 列表,然后将其写入 csv 文件。 希望这会有所帮助。

    下面创建大小为 560 的大/指数数的比率列表。

    import random
    rate_list= [str(random.randint(10000000000,999999999999)) for _ in xrange(1,561)]
    
     >>> rate_list
        ['77041105830', '92494887483', ..........., '749368445154', '435710931425']
    

    然后我们打开要写入的输出文件并遍历 rate_list 的索引以将每个元素写入新行。这可以适用于您的情况。

    with open('reaction rate list.csv','w') as output:
        for i in range(0,560):
            output.write(rate_list[i])
            output.write('\n')
    

    结果 这导致输出文件为 560 行的单列。

    【讨论】:

    【解决方案2】:

    我不熟悉 csv 写入器,但如果您想在一行中使用它,使用标准文件写入器并不难

    rate_list=[]
    out='['
    for i in range (1,560): 
        A_no=int(Ar.iloc[i]) #index number for first reactant
        B_no=int(Br.iloc[i]) #index number for second reactant
        k=mydict['variable']['k'][i][29] #Grabs reaction rate constant
        A_ymix=mydict['variable']['ymix'][29][A_no] #Grabs abundance for first reactant
        B_ymix=mydict['variable']['ymix'][29][B_no] #Grabs abundance for second reactant
        rate=A_ymix*B_ymix*N*k
        out= out + rate + ','
    out = out.replace(out[len(out) - 1], ']')
    f = open('list.csv', 'w+')
    open.write(out)
    f.close()
    

    【讨论】:

      【解决方案3】:

      要使每个值成为一行,请附加一个包含单个项目而不是项目的列表。另外,使用newline='' 参数打开文件。

      ...
          rate_list.append([rate])
      with open('reaction rate list.csv','w') as output:
           writer= csv.writer(output, delimiter=',', newline='')
      writer.writerows(rate_list)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-14
        • 2021-02-27
        • 1970-01-01
        • 2016-03-18
        • 2014-06-27
        • 1970-01-01
        • 1970-01-01
        • 2017-05-06
        相关资源
        最近更新 更多