繁体   English   中英

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

[英]how can I make a loop for importing data and saving in sequence

我有一个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" )

如果我手动执行此操作。 我想避免手动进行

您可以使用str.format, 格式字符串语法构造文件名

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

您可以在遍历工作表的行时使用枚举 ,以帮助构造文件名。

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”开始一直到“ MN0xx.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')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM