python 在列号和电子表格列名称之间转换(alpha ID)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 在列号和电子表格列名称之间转换(alpha ID)相关的知识,希望对你有一定的参考价值。

""" 
SPREADSHEET-STYLE COLUMN HEADERS
"""
from collections import OrderedDict

def id2num(s):
    """ spreadsheet column name to number
    ref: http://stackoverflow.com/questions/7261936

   :param s: str -- spreadsheet column alpha ID (i.e. A, B, ... AA, AB,...)
   :returns: int -- spreadsheet column number (zero-based index)

    >>> id2num('A')
    0
    >>> id2num('B')
    1
    >>> id2num('XFD')
    16383
    >>>

    """
    n = 0
    for ch in s.upper():
        n = n * 26 + (ord(ch) - 65) + 1
    return n - 1


def num2id(n):
    """
    ref: http://stackoverflow.com/questions/181596

   :param n: int -- spreadsheet column number (zero-based index)
   :returns: int -- spreadsheet column alpha ID (i.e. A, B, ... AA, AB,...)

    >>> num2id(0)
    'A'
    >>> num2id(1)
    'B'
    >>> num2id(16383)
    'XFD'

    """
    s = ''
    d = n + 1
    while d:
        m = (d - 1) % 26
        s = chr(65 + m) + s
        d = int((d - m) / 26)
    return s


class AlphaID:

    def __init__(self, num=99):
        self.num = num
        self.create(num)

    def create(self, stop=None, start=0):
        if stop is None:
            stop = self.num
        self.ids = tuple(map(num2id, range(start, stop)))

    def get_(self, n=None):
        if not n or n == len(self.ids):
            return self.ids
        if n < len(self.ids):
            return self.ids[:n]
        return self.ids + self.create(n - len(self.ids), start=n)

    def as_dict(self, origin=0):
        return OrderedDict((i, n) for n, i in enumerate(self.ids, origin))


def get_alphaids(num=99):
    return AlphaID(num).get_(num)

以上是关于python 在列号和电子表格列名称之间转换(alpha ID)的主要内容,如果未能解决你的问题,请参考以下文章

CF1B Spreadsheets

使用列号和行号进行 UNPIVOT 和 JOIN

Python:如果字符串出现在列中,则删除行

python 按Prandas中的列号或名称删除列

在列的值和其他列的值之间为 UK 添加约束检查

在 Python 中将 Excel 列类型从 Int 转换为 String