背景
为了把excel顺利的导入oracle,我准备写一个小程序,但是在oracle建表时,不知道各列设成多少的长度比较合适,于是我就写了这个

# _*_ encoding:utf-8 _*_
import openpyxl
import datetime


def get_str_real_len(content):
    real_str_len = len(content)
    for ch in content:
        if '\u2E80' <= ch <= '\uFE4F':
            real_str_len += 1
    return real_str_len


def get_real_len(content):
    if isinstance(content,str):
        real_len = get_str_real_len(content)
    elif isinstance(content,int):
        real_len = get_str_real_len(str(content))
    elif isinstance(content,datetime.datetime):
        real_len = 25    # 一个完整的日期加时间一般是18,为了适当冗余,我设成25位
    else:
        real_len = 0
    return real_len


path = r'E:\工作\当前工作\房地产一体化三方数据整理\商品房预售许可\预售许可证信息-汇总.xlsx'
wb = openpyxl.load_workbook(path)
ws = wb.active

col_max_lens = []
for col in ws.columns:
    col_lens = (get_real_len(cell.value) for cell in col[1:])  # 索引从1开始是为了去除首行的标题
    max_col_len = max(col_lens)
    col_max_lens.append(max_col_len)

print(col_max_lens)

输出结果:

[34, 42, 8, 5, 22, 10, 0, 6, 0, 6, 0, 25]

我的代码暂时没考虑浮点数的精度问题,这个以后有时间再补上吧。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐