【问题标题】:Creating excel file using values from a dict python使用dict python中的值创建excel文件
【发布时间】:2018-01-10 19:32:38
【问题描述】:

我有一个下面给出的代码,我想用它来创建一个 excel 文件。代码是:

#!/usr/bin/python
import xlwt
wb = xlwt.Workbook()
ws = wb.add_sheet('A Test Sheet')
orf = {1: ('793', 804, 12, 0), 2: ('952', 1020, 69, 0), 3: ('1222', 1227, 6, 0), 4: ('1309', 1338, 30, 0), 5: ('1921', 1977, 57, 0), 6: ('2164', 2253, 90, 0), 7: ('2305', 2337, 33, 0)}
ws.write(0, 0, "NO.")
ws.write(0, 1, "Direction")
ws.write(0, 2, "Frame")
ws.write(0, 3, "Start")
ws.write(0, 4, "End")
ws.write(0, 5, "Codon numbers")
ws.write(0, 6, "ORF Sequence")

j = 1
k = 2
for i in orf.items():
    numorf=i[0]
    startorf=orf[numorf][0]
    stoporf=orf[numorf][1]
    lengthorf=orf[numorf][2]
    frameorf=orf[numorf][3]        
    ws.write(j, k, numorf)
    ws.write(j, k, "5 to 3")
    ws.write(j, k, frameorf)
    ws.write(j, k, startorf)  
    ws.write(j, k, stoporf)
    ws.write(j, k, lengthorf)
    ws.write(j, k, "ATGACA...ATGCGA")
    j = j+1
    k = k+1   


wb.save('example.xls')

代码的所有部分工作正常,但循环中写入字典值的部分不正确并出现以下错误,

for i,j,k in orf.items():
ValueError: need more than 2 values to unpack

我试图解决它,但没有成功。

如何在循环中正确管理列号和行号,以便可以使用 dict 中的值创建文件?

为了清楚起见,我想把 numorf 的值放在“NO”下面,“5 到 3”下面的方向,frameorf 下面“Frame”,startorf 下面“Start”,stoporf 下面“End”,lenghtorf 下面“ “ORF 序列”下方的“密码子编号”和“ATGACA...ATGCGA”。

【问题讨论】:

    标签: python dictionary xlwt


    【解决方案1】:

    首先for int 代码sn-p 与错误sn-p 的代码不同。

    无论如何,我认为你想要的是这样的:

    for row,values in orf.iteritems():
        startorf,stoporf,lengthorf,frameorf = values
        ws.write(row, 0, row)
        ws.write(row, 1, "5 to 3")
        ws.write(row, 2, frameorf)
        ws.write(row, 3, startorf)  
        ws.write(row, 4, stoporf)
        ws.write(row, 5, lengthorf)
        ws.write(row, 6, "ATGACA...ATGCGA")
    

    前两行也可以改写为:

    for row,(startorf,stoporf,lengthorf,frameorf) in orf.iteritems(): 
        # note the parenthesis, them make the tuple (the value) expand in the respective variables
        # just write to the worksheet as before
        ws.write(row, 0, row) 
        # ...
    

    【讨论】:

    • 当我使用这行 ws.write(row, 0, numorf) 时,它会在第一个代码的情况下出错,但是当我将其更改为 ws.write(row, 0, row) 时它可以工作美好的。谢谢你。
    • 是的,你是对的,我没有测试过。我已经更改了代码以使其正确。谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2019-11-10
    相关资源
    最近更新 更多