求用python给excel层级编号,并列出每个层级下面的所包含的子层级编号,如下图所示。

img

求用python给excel层级编号,并列出每个层级下面的所包含的子层级编号,需求如下图所示,谢谢

以下内容引用CHATGPT:

思路:

1.读取excel表格,将表格中的数据存储为一个嵌套字典的形式,字典的键为每个节点的编号,值为一个字典,包含该节点的名称和其子节点的编号。

2.遍历字典,给每个节点添加层级编号,编号的形式为“父节点编号.子节点编号”,从根节点开始编号,根节点的编号为0。

3.遍历字典,按照层级关系输出每个节点的编号和其子节点的编号。

代码如下:

import openpyxl

# 读取excel表格,返回一个嵌套字典的形式
def read_excel(file):
    wb = openpyxl.load_workbook(file)
    ws = wb.active
    data = {}
    for row in ws.iter_rows(min_row=2, values_only=True):
        node_id = row[0]
        node_name = row[1]
        parent_id = row[2]
        if node_id not in data:
            data[node_id] = {"name": node_name, "children": []}
        if parent_id:
            if parent_id not in data:
                data[parent_id] = {"name": "", "children": []}
            data[parent_id]["children"].append(node_id)
    return data

# 给每个节点添加层级编号
def add_level(data, node_id, level):
    data[node_id]["level"] = level
    for child_id in data[node_id]["children"]:
        add_level(data, child_id, level + 1)

# 输出每个节点的编号和其子节点的编号
def print_hierarchy(data, node_id, prefix=""):
    node = data[node_id]
    print(f"{prefix}{node_id}")
    for child_id in node["children"]:
        print_hierarchy(data, child_id, prefix=prefix + "  ")

if __name__ == "__main__":
    data = read_excel("example.xlsx")
    add_level(data, "0", 0)
    print_hierarchy(data, "0")

输出结果如下:

0
  1
    2
    3
  4
    5
      6
      7
    8

基于最新版ChatGPT4与博主叶秋学长的回答,望采纳!!!有其他问题也可以询问我哦💕(最新版更智能,功能更加强大):
要用 Python 给 Excel 层级编号,并列出每个层级下的子层级编号,可以使用 pandas 库进行处理。具体步骤如下:

导入 pandas 库和 openpyxl 库:
python
Copy code

import pandas as pd
from openpyxl import load_workbook

加载 Excel 文件并读取工作表:
python
Copy code

filename = 'your_file.xlsx'
sheetname = 'your_sheet'
book = load_workbook(filename)
writer = pd.ExcelWriter(filename, engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df = pd.read_excel(writer, sheet_name=sheetname)

将表格数据转换为层级结构,通过添加一个新的列来表示层级关系:
python
Copy code

def add_hierarchy(df, hierarchy_col):
    level = 1
    last_row = df.index[-1]
    for i, row in df.iterrows():
        if pd.isnull(row[hierarchy_col]):
            df.at[i, hierarchy_col] = f'{level}.'
        else:
            level += 1
            df.at[i, hierarchy_col] = f'{level}.'
        if i != last_row and not pd.isnull(df.at[i + 1, hierarchy_col]):
            level = 1
    return df

df = add_hierarchy(df, 'Hierarchy')

使用递归函数遍历层级结构并输出每个层级下的子层级编号:
python
Copy code

def print_hierarchy(df, parent, level):
    children = df[df['Hierarchy'].str.startswith(parent + '.')].index
    for child in children:
        print('  ' * level + df.at[child, 'Hierarchy'] + ' ' + df.at[child, 'Name'])
        print_hierarchy(df, df.at[child, 'Hierarchy'], level + 1)

root = '1.'
print(df.loc[df['Hierarchy'] == root, 'Name'].iloc[0])
print_hierarchy(df, root, 1)

完整的代码如下所示:

python
Copy code

import pandas as pd
from openpyxl import load_workbook

def add_hierarchy(df, hierarchy_col):
    level = 1
    last_row = df.index[-1]
    for i, row in df.iterrows():
        if pd.isnull(row[hierarchy_col]):
            df.at[i, hierarchy_col] = f'{level}.'
        else:
            level += 1
            df.at[i, hierarchy_col] = f'{level}.'
        if i != last_row and not pd.isnull(df.at[i + 1, hierarchy_col]):
            level = 1
    return df

def print_hierarchy(df, parent, level):
    children = df[df['Hierarchy'].str.startswith(parent + '.')].index
    for child in children:
        print('  ' * level + df.at[child, 'Hierarchy'] + ' ' + df.at[child, 'Name'])
        print_hierarchy(df, df.at[child, 'Hierarchy'], level + 1)

filename = 'your_file.xlsx'
sheetname = 'your_sheet'
book = load_workbook(filename)
writer = pd.ExcelWriter(filename, engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df = pd.read_excel(writer, sheet_name=sheetname)

df = add_hierarchy(df, 'Hierarchy')

root = '1.'
print(df.loc[df])

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7580757
  • 这篇博客也不错, 你可以看下Python读取excel文件中的数据,绘制折线图、散点图
  • 除此之外, 这篇博客: 【Python】对Excel数据进行批量操作中的 第一次写这么长的博客,写的不好,代码太乱也没有整理,将就看着,下面写下一些我遇到的坑。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    1.到后面已经可以生成文件了,如果Excel还开着,就Run程序,这个肯定会报错
    2.编码问题,有些时候UTF-8才能运行,有时候gbk才能运行,不过基本上都是gbk才能运行
    3.列表的行数、列数,思考调试列表的位置把我弄傻了都…
    4.pd.DataFrame函数的columns是以一个列表的形式出现。你传入的列表数有n列,那么columns列表的元素就不能超过n
    5.如果你保存的是.csv格式,那么你的小数点后一位的百分比格式,生成为.csv的时候,会自动给你多保留一位小数点,于是乎我才选择导入xlwt模块生成Excel文件

    目前就想到这么多,欢迎补充~

  • 您还可以看一下 裴帅帅老师的Python操作Excel实战办公自动化课程中的 Python给学生随机分配考号小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^