Python-如何将输出写入CSV文件的单个列?

时间:2018-03-30 01:53:41

标签: python csv

我编写了一个脚本,根据文件输入计算给定大气的反应速率。脚本的那部分工作正常 - 我遇到麻烦的是输出。

我试图写的输出如下:

[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)

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

谢谢!

3 个答案:

答案 0 :(得分: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行。

enter image description here

答案 1 :(得分:0)

我不熟悉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()

答案 2 :(得分:0)

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

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