Python读取Excel文件中指定的列数并生成CSV文件

0x00 安装Pandas和OpenPyXL

python 复制代码
pip install pandas

pip install openpyxl

0x01 Encoding

python 复制代码
import os
import pandas as pd
import openpyxl
from openpyxl import load_workbook
import csv


def write_dict_to_csv(dict_data, fileName):
    df = pd.DataFrame.from_dict(dict_data)
    # 将DataFrame写入CSV文件
    df.to_csv(fileName, index=False)


def writeCSV(dict_data, fileName):
    # 打开CSV文件
    with open(fileName, 'w', newline='') as file:
        writer = csv.writer(file)

        # writer.writerow(["key", "value"])
        print("====================================")

        # 工况点字典
        msgPoints_dict = {}
        msgPoints_num = 51

        # 遍历字典
        for key, value in dict_data.items():
            print(value)
            # writer.writerow(value)
            if isinstance(value, list):
                for item in value:
                    # 若表格数据为空则过滤掉
                    if isinstance(item, str) and item.startswith('EP') and item is not None:
                        msgPoints_dict[msgPoints_num] = value
                        # writer.writerow(value)
                        msgPoints_num = msgPoints_num + 1

        print("msgPoints_dict_size: " + str(len(msgPoints_dict)))

        for key, value in msgPoints_dict.items():
            print(key, value, end="\n")
            # 检查键值是否以"EP"开头
            if isinstance(value, list) and value and isinstance(value[2], str) and value[2].startswith("EP"):
                # print(value)

                tmp_list = [str(key)]
                tmp_list.extend(value)
                # 写入CSV文件
                # writer.writerow([key, item])
                writer.writerow(tmp_list)

    pass


def main():
    print("=== Read Excel ===")
    fileName = './doc/data.xlsx'

    # 字典类型
    dict_data = {}
    if os.path.exists(fileName):
        # 当前活跃的Sheel页
        wb = load_workbook(fileName)
        print(wb.active)

        shell = wb.active
        # print(ws['B7'].value)
        # print(ws.cell(7, 2).value)
        # rows = ws.rows
        # print(rows)

        columns_to_print = ['B', 'F', 'O']
        index = 1
        for row in shell.iter_rows():
            tmp_list = []
            for col_idx, cell in enumerate(row, start=1):
                column_letter = openpyxl.utils.get_column_letter(col_idx)
                if column_letter in columns_to_print:
                    tmp_list.append(cell.value)
                    # print(cell.value)

            dict_data[index] = tmp_list
            index = index + 1

    writeCSV(dict_data, "output.csv")
    # write_dict_to_csv(dict_data, "msg_points.csv")
    pass


if __name__ == "__main__":
    main()
相关推荐
GitFun22 分钟前
KDJ vs RSI:11年数据实测,金叉死叉输了48个点
python·股票·量化交易
李可以量化33 分钟前
从零读懂配对交易(上):从套利本源到配对交易的核心逻辑
python·区块链·量化交易·通达信·qmt
CCblandy39 分钟前
HTTP 长连接 3 类故障实测:[WinError 10053]、99 个 TIME_WAIT、69 次多余握手,4 种对策怎么选
后端·python·网络协议·http·云原生·性能优化·架构
wangchunyu11443 分钟前
Python 数据可视化实战入门教程
开发语言·python·信息可视化
蜗牛互联网1 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python
SL_staff1 小时前
当规则引擎开始‘懂业务’:JVS-Rules金融风控四大原生能力拆解
java·python·全栈
蚰蜒螟2 小时前
从内核启动到 Java NIO:一次 socket accept 的源码串联之旅
java·python·nio
学逆向的2 小时前
C 突破编译器限制
c语言·开发语言·网络安全
jimy12 小时前
C++ 虚函数表:基类和派生类共用一张 vtable 吗?
开发语言·c++
高洁012 小时前
AI赋能产业升级与中美未来经济赛道博弈
人工智能·python·深度学习·机器学习·transformer