Python 将井号转换为96孔板上的标识符

Python 将井号转换为96孔板上的标识符,python,bioinformatics,Python,Bioinformatics,在96孔板中有8列(a,B,…)和12行(01…12); 所以这个盘子看起来像这样: A01 A02 ... A12 B01 B02 ... B12 C01 ... ... H01 .. 目前,我已将这些车牌识别为: 1 2 3 4 ... 12 13 14 15 ...24 .. 84 ... 96 如何编写函数wellnumber2welldidentifier,将数字索引转换为顶部使用的格式?例如,well1将返回A01,well13将返回B01哦,当然可以,让它以1

在96孔板中有8列(a,B,…)和12行(01…12); 所以这个盘子看起来像这样:

A01 A02 ... A12
B01 B02 ... B12
C01 ...
...
H01 ..
目前,我已将这些车牌识别为:

 1 2 3 4 ... 12
 13 14 15 ...24
 ..
 84 ...      96

如何编写函数
wellnumber2welldidentifier
,将数字索引转换为顶部使用的格式?例如,well
1
将返回
A01
,well
13
将返回
B01

哦,当然可以,让它以1为基础,为什么不

'ABCDEFGH'[(num - 1) // 12] + '%02d' % ((num - 1) % 12 + 1,)

让@Ignacio Vazquez Abrams的答案更进一步。以下是两种方法:

  • 适用于几乎任何尺寸的机架(行X列)
  • 从A1、B1等样式井位转换为数字位置或从数字位置转换为数字位置
  • @staticmethod
    def ConvertNumericWellPostOA1样式(numericPos、contRows、contCols、colOrRowMajor、PadWithZero):
    """
    将数字位置转换为A1样式的位置。
    参数
    ----------
    数字位置:int
    要转换的数字井位。
    contMaxRows:int
    最大容器行数。
    contMaxCols:int
    最大容器列数。
    专业:str
    “列”或“行”用于列或行主寻址。
    带零的pad:bool
    是否用零填充返回的数字部分。
    i、 e.,A1或A01
    """
    如果numericPos<1:
    raise value ERROR(“容器位置值”“+str(numericPos)+”“”必须为1或更大。”)
    如果contCols<1:
    raise VALUETERROR(“容器列值””+str(contCols)+“”必须为1或更大。”)
    如果contRows<1:
    raise VALUERROR(“容器行值””+str(contRows)+“”必须为1或更大。”)
    如果numericPos>contCols*contRows:
    raise value ERROR(“容器位置值””+str(numericPos)+“”超过了最大容器井可能的”+str(contCols*contRows)+“.”)
    如果colOrRowMajor==“行”:
    如果pad为零:
    返回'ABCDEFGH'[(numericPos-1)//contCols]+'%02d'((numericPos-1)%contCols+1,)
    其他:
    返回'ABCDEFGH'[(numericPos-1)//contCols]+str((numericPos-1)%contCols+1)
    elif colOrRowMajor==“col”:
    如果pad为零:
    返回'ABCDEFGH'[(numericPos-1)%contRows]+'%02d'(math.ceil(numericPos/contRows),)
    其他:
    返回'ABCDEFGH'[(numericPos-1)%contRows]+str(math.ceil(numericPos/contRows))
    其他:
    raise VALUERROR(“容器遍历值“+”colOrRowMajor+“”必须是“列”或“行”)

    @静力学方法 def ConvertA1StylePositionToNumeric(A1StylePos:str,contRows:int,contCols:int,colOrRowMajor:str): #检查至少两个字符 如果len(A1StylePos)==0: raise VALUE ERROR(“无法转换空A1样式井位”) 如果len(A1StylePos)==1: raise VALUE ERROR(“A1样式井位至少需要2个字符”) #大写 A1StylePos=A1StylePos.upper() colPart=0 #获取A1样式机架位置的零件 rowPart=A1StylePos.upper()[0:1] 如果作战需求文件(rowPart)<65或作战需求文件(rowPart)>90: raise VALUE ERROR(“A1样式井位的第一个字符必须是字母a-Z”) colPartAsString=A1StylePos[1:len(A1StylePos)] 如果colPartAsString.isdigit(): colPart=int(colPartAsString) 其他: raise VALUE ERROR(“井位第一个字符后的字符必须是数字。”) #错误检查 如果作战需求文件(A1StylePos[0])<65或作战需求文件(A1StylePos[0])>90: raise VALUE ERROR(“井位的第一个字符“+A1StylePos+””必须是字符a到Z.) 如果contCols<1: raise VALUETERROR(“容器列值””+str(contCols)+“”必须为1或更大。”) 如果contRows<1: raise VALUERROR(“容器行值””+str(contRows)+“”必须为1或更大。”) 如果控件>26: raise VALUERROR(“容器行值””+str(contRows)+“”不得大于26。”) 如果colPart>contCols: raise value ERROR(“井位值“+A1StylePos+””超过了“+str(contCols)+”的最大容器列数) 如果colPart<1: raise value ERROR(“井位值””+A1StylePos+“”必须为1或更大。”) 如果(ord(第64行)>控制: raise value ERROR(“井位值“+A1StylePos+””指的是超过最大容器列数“+str(contCols)+“.”的井) #皈依 如果colOrRowMajor==“col”: 返回值(int)((colPart-1)*contRows)+(ord(rowPart-64)) elif colOrRowMajor==“行”: 返回(int)((ord(rowPart)-65)*contCols)+colPart); 其他:
    raise value ERROR(“容器遍历值“+”colOrRowMajor+”'必须是“col”或“row”。”)

    +1,只是为了叹息
    哦,当然,去把它设为1基为什么不呢