<p>把艾布拉姆斯的回答再往前走几步。以下是两种方法:</p>
<ol>
<li>适用于几乎任何尺寸的机架(行X列)</li>
<li>从A1、B1等样式的井位转换为数字位置和从数字位置转换。在</li>
</ol>
<p><code>@staticmethod
def convertNumericWellPosToA1Style(numericPos, contRows, contCols, colOrRowMajor, padWithZeros):
"""
Convert a numeric position to an A1 style position.
Parameters
numericPos : int
Numeric well position to be converted.
contMaxRows : int
Max number of container rows.
contMaxCols : int
Max number of container cols.
colOrRowMajor : str
'col' or 'row' for column or row major addressing.
padWithZeros : bool
Whether to pad the numeric portion returned, with zeros or not.
i.e., A1 or A01
"""
if numericPos < 1:
raise ValueError("Container position value '" + str(numericPos) + "' must be 1 or greater.")
if contCols < 1:
raise ValueError("Container columns value '" + str(contCols) + "' must be 1 or greater.")
if contRows < 1:
raise ValueError("Container rows value '" + str(contRows) + "' must be 1 or greater.")
if numericPos > contCols * contRows:
raise ValueError("Container position value '" + str(numericPos) + "' exceeds the maximum container wells possible of '" + str(contCols * contRows) + "'.")
if colOrRowMajor == "row":
if padWithZeros:
return 'ABCDEFGH'[(numericPos - 1) // contCols] + '%02d' % ((numericPos - 1) % contCols + 1,)
else:
return 'ABCDEFGH'[(numericPos - 1) // contCols] + str((numericPos - 1) % contCols + 1)
elif colOrRowMajor == "col":
if padWithZeros:
return 'ABCDEFGH'[(numericPos - 1) % contRows] + '%02d' % (math.ceil(numericPos / contRows),)
else:
return 'ABCDEFGH'[(numericPos - 1) % contRows] + str(math.ceil(numericPos / contRows))
else:
raise ValueError("Container traversal value '" + colOrRowMajor + "' must be 'col' or 'row'.")</code></p>
<p>@静态方法
def ConvertA1StylePositionToNumeric(A1StylePos:str,contRows:int,contCols:int,colOrRowMajor:str):
#至少检查两个字符
如果len(A1StylePos)==0:
raise ValueError(“无法转换空的A1样式井位置。”)
如果len(A1StylePos)==1:
raise VALUERROR(“A1样式井位至少需要2个字符。”)
#大写字母
A1StylePos=A1StylePos.上部()
colPart=0
#获取A1型机架位置的部件
行部件=A1StylePos.上部()[0:1]
如果ord(行部件)<;65或ord(行部件)>;90:
raise ValueError(“A1样式井位置的第一个字符必须是字母a-Z.”)
colPartAsString=A1StylePos[1:长度(A1StylePos)]
如果colPartAsString.isdigit():
colPart=int(colPartAsString)
其他:
raise ValueError(“井位第一个字符后面的字符必须是数字。”)
#错误检查
如果ord(A1StylePos[0])<;65或ord(A1StylePos[0])>;90:
raise ValueError(“井位的第一个字符''+A1StylePos+”'必须是字符a到Z.)
如果是contCols<;1:
raise ValueError(“Container columns value'”+str(contCols)+“必须是1或更大。”)
如果控制<;1:
raise ValueError(“Container rows value'”+str(contRows)+“'必须是1或更大。”)
如果控制>;26:
raise ValueError(“Container rows value'”+str(contRows)+“'不得大于26。”)
如果colPart>;contCols:
raise ValueError(“井位值”'+A1StylePos+“'超过了'+str(contCols)+“'.”可能的最大容器列数)
如果colPart<;1:
raise ValueError(“井位值”'+A1StylePos+“'必须大于等于1。”)
如果(ord(行部件)-64)>;控制:
raise ValueError(“井位值”'+A1StylePos+“'指的是超出了容器列最大值''+str(contCols)+“'.”的井)
#转换
如果colOrRowMajor==“col”:
return(int)(((colPart-1)*contRows)+(ord(rowPart)-64))
elif colOrRowMajor==“行”:
return(int)((ord(rowPart)-65)*contCols)+colPart;
其他:
raise ValueError(“Container traversal value'”+colOrRowMajor+“'必须是'col'或'row'”)</p>