如何循环导入数据并按顺序保存

2024-09-28 05:21:05 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我有一个xls文件,第一列由许多行组成

MN
TN
RMON
BNE
RMGS
HUDGD
YINT

然后我想把每个单元格(它的值)传递给一个函数

mystruc1 = make_structure("MN")
mystruc2 = make_structure("TN")
mystruc3 = make_structure("RMON")
mystruc4 = make_structure("BNE")
mystruc5 = make_structure("RMGS")
mystruc6 = make_structure("HUDGD")
mystruc7 = make_structure("YINT")

所以每次一个单元格的值都会被传递给函数

然后我想把它的输出传递给另一个函数

out = Bio.PDB.PDBIO()
out.set_structure(mystruc1)
out.save( "MN001.pdb" )
out.set_structure(mystruc2)
out.save( "MN002.pdb" )
out.set_structure(mystruc3)
out.save( "MN003.pdb" )
out.set_structure(mystruc4)
out.save( "MN004.pdb" )
out.set_structure(mystruc5)
out.save( "MN005.pdb" )
out.set_structure(mystruc6)
out.save( "MN006.pdb" )
out.set_structure(mystruc7)
out.save( "MN007.pdb" )

这就是我手动操作的方式。我想避免手工操作


Tags: 函数makesaveoutstructurepdbtnset
2条回答

您可以使用str.format格式,Format String Syntax

>>> filename = '{}{:04}.pdb'
>>> filename.format('MN', 1)
'MN0001.pdb'
>>> filename.format('MN', 352)
'MN0352.pdb'
>>> 

可以在遍历工作表的行时使用enumerate来帮助构造文件名。你知道吗

import xlrd
filename = '{}{:04}.pdb'
workbook = xlrd.open_workbook('test.xls')
for sheet in workbook.sheets():
    for n, row in enumerate(sheet.get_rows()):
        col_0 = row[0].value
        print filename.format(col_0, n)

如果您只想迭代第一列。你知道吗

for sheet in workbook.sheets():
    for n, value in enumerate(sheet.col_values(0, start_rowx=0, end_rowx=None)):
        print filename.format(value, n)

也可以直接访问cel值。你知道吗

for sheet in workbook.sheets():
    for i in xrange(sheet.nrows):
        rowi_col0 = sheet.cell_value(i, 0)
        print filename.format(rowi_col0, i)

一旦提取了cel值,就可以将其传递给任何函数/方法—类似于将cel值传递给str.format格式方法。你知道吗

mystruc = make_structure(value) 

要自动处理cel值,请将进程添加到循环中。你知道吗

for sheet in workbook.sheets():
    for i in xrange(sheet.nrows):
        rowi_col0 = sheet.cell_value(i, 0)
        #print filename.format(col_0, i)
        my_structure = make_structure(rowi_col0)
        out = Bio.PDB.PDBIO()
        out.set_structure(my_structure)
        out.save(filename.format(rowi_col0, i))

我没有评论特权要求澄清,所以我会尽我所能回答这个问题,希望你能澄清我是否走错了方向。你知道吗

根据您编写的内容,我假设您有一个列'MN',您想命名一组从'MN001.pdb'一直到'MN0'的文件xx.pdb公司'(其中xx是最后一行。你知道吗

实现这一点的一种方法是使用一个循环,该循环有一个计数器,并在第二个for循环的每次迭代中进行迭代。你知道吗

colname = "MN"

for sheet in workbook.sheets():
    counter = 0
    for row in range(sheet.nrows):
        # pass your code here
        counter += 1
        s_counter = str(counter)
        s = ''
        if len(s_counter) < 2:
            s = '0' + s
        elif len(s_counter) < 3:
            s = '00' + s
        ...
        out.save(s + '.pdb')

相关问题 更多 >

    热门问题