IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python读写Excel表,并实现表头置换数据填充 -> 正文阅读

[Python知识库]Python读写Excel表,并实现表头置换数据填充

一、背景

有一天朋友跟我说,工作上统计的Excel数据弄错了,需要重新计算,手填的工作量很大,向我求助,我一听,觉得是时候展现真正技术的时候了。
简单来说就是把数据的列置换为表头,如下图
在这里插入图片描述
需求总结:

1. 前置条件:原始需要拷贝到新Excel文件,不保留表头,第一行即为有用数据
2. 移除 " 汇总" 的行数据
3. 移除 "(空白)" 的行数据
4. 转换要求保留原来的行顺序结构
5. 拷贝后新文件第二列数据置换为表头(保持该项出现的顺序)
6. 填入原表格统计数据,如果原表格没有该项,填入默认值:0
7. 弹窗选择xlxs/xlx文件,输出转换后文件到选中文件目录下,文件名增加后缀 -转换结果.xlxs/xlx
8. 只要求转换第一个sheet即可

二、实现代码

import os
import tkinter as tk
from tkinter import filedialog
import tkinter.messagebox
import sys
from isodate import D_DEFAULT
import xlrd
import xlwt

file_dir = []


def get_file():
    root = tk.Tk()
    root.withdraw()
    while True:
        xlsx_path_name = filedialog.askopenfilename()
        print("\n 文件路径", xlsx_path_name)
        if xlsx_path_name.endswith('.xlsx') | xlsx_path_name.endswith('.xls'):
            file_dir.append(xlsx_path_name)
            break
        else:
            result = tkinter.messagebox.askretrycancel(
                "進寶の无敌转换器", "正经选excel文件可以吗? 宝")
            if False == result:
                sys.exit()


def covert_file_header():
    book = xlrd.open_workbook(file_dir[0])
    output_workbook = xlwt.Workbook()   # 输出文件
    dir = os.path.dirname(file_dir[0])
    file_name = os.path.basename(file_dir[0])
    output_file_name = ""
    if file_name.endswith(".xlsx"):
        output_file_name = dir + "/" + file_name.replace(".xlsx", "-转换结果.xlsx")
    else:
        output_file_name = dir + "/" + file_name.replace(".xls", "-转换结果.xls")
    sheet = book.sheets()[0]
    nrows = sheet.nrows
    ncols = sheet.ncols
    print('表格总行数', nrows)
    print('表格总列数', ncols)
    row_list = []   # 行表头
    row_dict = {}
    col_list = []   # 列表头
    col_dict = {}
    for row in range(nrows):
        row_values = sheet.row_values(row)
        cell_value_0 = str(row_values[0])

        if cell_value_0.endswith(' 汇总') or cell_value_0.endswith('(空白)') or cell_value_0.endswith('总计'):
            continue
        if cell_value_0 != '' and row_dict.__contains__(cell_value_0) == False:
            row_list.append(cell_value_0)
            row_dict[cell_value_0] = {}

        # 第二个数据,作为列表头
        cell_value_1 = str(row_values[1])
        cell_value_0 = row_list[-1]     # 取行最后一个元素
        if cell_value_1 != '' and col_dict.__contains__(cell_value_1) == False:
            col_list.append(cell_value_1)
            col_dict[cell_value_1] = cell_value_1

        value_dict = row_dict[cell_value_0]
        value_dict[cell_value_1] = str(row_values[2])

    worksheet = output_workbook.add_sheet(sheet.name)

    # 写列表头
    for c in range(len(col_list)):
        worksheet.write(0, c + 1, col_list[c])

    for r in range(len(row_list)):
        c_row = row_list[r]
        c_col_dict = row_dict[c_row]
        # 写行表头
        worksheet.write(r + 1, 0, c_row)
        for c in range(len(col_list)):
            if c_col_dict.__contains__(col_list[c]):
                worksheet.write(r + 1, c + 1, c_col_dict[col_list[c]])
            else:
                worksheet.write(r + 1, c + 1, '0')
    output_workbook.save(output_file_name)


if __name__ == '__main__':
    get_file()
    covert_file_header()

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:19:02  更:2022-04-09 18:19:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:21:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码