python输出表格


import xlwt
import xlrd
wb = xlwt.Workbook()
ws = wb.add_sheet('Gene Ontology')
ws.write(0,0,'id')
ws.write(0,1,'name')
ws.write(0,2,'definition')
ws.write(0,3,'childnodes')
from xml.dom.minidom import parse
import xml.dom.minidom
DOMTree = xml.dom.minidom.parse('go_obo.xml')
terms = DOMTree.documentElement
terms1 = terms.getElementsByTagName("term")
for term in terms1:
    defs = term.getElementsByTagName("def")[0]
    defstr = defs.getElementsByTagName('defstr')[0]
    id = term.getElementsByTagName('id')[0]
    name = term.getElementsByTagName('name')[0]
    i = 1
    if'autophagosome'in defstr.childNodes[0].data:
       print('id:', id.childNodes[0].data)
       print('name:', name.childNodes[0].data)
       print('definition:', defstr.childNodes[0].data)
       is_a = defs.getElementsByTagName('is_a')
       print('childnodes:', is_a.length)
       ws.write(i, 0, id.childNodes[0].data)
       ws.write(i, 1, name.childNodes[0].data)
       ws.write(i, 2, defstr.childNodes[0].data)
       ws.write(i, 3, is_a.length)
       wb.save('Gene Ontology.xls')
    i = i + 1

这样出现了报错,各位可以帮我看看怎么改正吗?非常感谢!
Exception: Attempt to overwrite cell: sheetname='Gene Ontology' rowx=1 colx=0

将i变量的初始化移至循环外部。它应该在每一行的写入后递增。
wb.save('Gene Ontology.xls')这行代码应该放在循环外面,以便在所有数据写入后只保存一次Excel文件。


import xlwt
import xlrd
from xml.dom.minidom import parse
import xml.dom.minidom

wb = xlwt.Workbook()
ws = wb.add_sheet('Gene Ontology')
ws.write(0, 0, 'id')
ws.write(0, 1, 'name')
ws.write(0, 2, 'definition')
ws.write(0, 3, 'childnodes')

DOMTree = xml.dom.minidom.parse('go_obo.xml')
terms = DOMTree.documentElement
terms1 = terms.getElementsByTagName("term")
i = 1

for term in terms1:
    defs = term.getElementsByTagName("def")[0]
    defstr = defs.getElementsByTagName('defstr')[0]
    id = term.getElementsByTagName('id')[0]
    name = term.getElementsByTagName('name')[0]

    if 'autophagosome' in defstr.childNodes[0].data:
        print('id:', id.childNodes[0].data)
        print('name:', name.childNodes[0].data)
        print('definition:', defstr.childNodes[0].data)
        is_a = defs.getElementsByTagName('is_a')
        print('childnodes:', is_a.length)

        ws.write(i, 0, id.childNodes[0].data)
        ws.write(i, 1, name.childNodes[0].data)
        ws.write(i, 2, defstr.childNodes[0].data)
        ws.write(i, 3, is_a.length)

        i += 1

wb.save('Gene Ontology.xls')

这个错误报告指出您尝试覆盖单元格(行1、列0),这可能是由于 i 变量在循环内声明并初始化的位置不正确导致的。

在您的代码中,i 变量应该在循环之外声明并初始化,以确保它在每次迭代之前都重置为1。

尝试将 i = 1 的行移动到循环之外,如下所示:

i = 1
for term in terms1:
    defs = term.getElementsByTagName("def")[0]
    defstr = defs.getElementsByTagName('defstr')[0]
    id = term.getElementsByTagName('id')[0]
    name = term.getElementsByTagName('name')[0]

    if 'autophagosome' in defstr.childNodes[0].data:
        print('id:', id.childNodes[0].data)
        print('name:', name.childNodes[0].data)
        print('definition:', defstr.childNodes[0].data)
        is_a = defs.getElementsByTagName('is_a')
        print('childnodes:', is_a.length)
        ws.write(i, 0, id.childNodes[0].data)
        ws.write(i, 1, name.childNodes[0].data)
        ws.write(i, 2, defstr.childNodes[0].data)
        ws.write(i, 3, is_a.length)
        i += 1

wb.save('Gene Ontology.xls')

此外,您还可以在写入 Excel 文件时检查是否已经存在该单元的值,并决定是将其覆盖还是添加到新行中。这可以通过 Worksheet.write() 方法的 overwrite_ok 参数来完成。

例如,如果您想要覆盖该单元格的旧值,可以将 Worksheet.write() 方法调用更改为:

ws.write(i, 0, id.childNodes[0].data, overwrite_ok=True)
ws.write(i, 1, name.childNodes[0].data, overwrite_ok=True)
ws.write(i, 2, defstr.childNodes[0].data, overwrite_ok=True)
ws.write(i, 3, is_a.length, overwrite_ok=True)
i += 1