python 检查csv的数据行的列是否和字段名一致

python 检查csv的数据行的列是否和字段名一致,不一致则删除不一致的数据行,以可以存储

python 复制代码
import pandas as pd

import time
# csv_file_path = 'Q603887-QhXQStockHisJiaoYiFlow.CSV'
def QhOpenCsvColCount(QhFlePath,Qhencoding="gbk"):
    """
    如果数据列数和CSV头不一致则删除,并重新组装df
    作者:阙辉
    """

    with open(QhFlePath, 'r',encoding=Qhencoding,errors="ignore") as Qhf:
        QhDataList = []
        for i,QhLine in enumerate(Qhf):
            if i == 0: 
                QhHeaderF = QhLine.strip().split(',')
                QhHeaderCloumns = len(QhHeaderF)
            else:
                QhLineList = QhLine.strip().split(',')
                column_count = len(QhLineList)  # 根据实际分隔符调整
                if QhHeaderCloumns == column_count:
                    QhDataList.append(QhLineList)
        Qhf.close()
        time.sleep(3)
    QhJieGuoDf = pd.DataFrame(QhDataList,columns=QhHeaderF)

    return QhJieGuoDf

# time.sleep(10)
# print(QhDataList)
# print(QhHeaderF)
QhFlePath='Q603887-QhXQStockHisJiaoYiFlow.CSV'
aa = QhOpenCsvColCount(QhFlePath=QhFlePath,Qhencoding="gbk")
print(aa)
aa.to_csv(QhFlePath,encoding="gbk",index=False)

应用

python 复制代码
@QhStarEndTime
def _QhDBToCsv(QhCsvPath,QhUniqueValue,QhJieGuoDf="",QhDateSort="",
               QhIsCsv=True,QhIsMd5=False,QhRearCloumn=""):
    """
    存储方法:
    QhCsvPath: 存储路径
    """
    # print(QhJieGuoDf)
    QhWeiYiZhiName = "唯一值"  # 唯一值字段名称
    try:
        # 存储数据
        if QhIsCsv:
            QhJieGuoDf = QhDfWeiYiZhi(QhJieGuoDf,QhUniqueValue,QhIsMd5=QhIsMd5)  # 组合唯一值
            """存储数据到CSV"""
            if os.path.exists(QhCsvPath):
                """判断CSV是否存在,存在则读取合并保留最新值(存在则更新,不存在则新增)"""
                try:
                    QhOldCsvDf = pd.read_csv(QhCsvPath,encoding='gbk',low_memory=False)   # 读取旧的数据
                except:
                    # 一般情况是列数不一致报错导致的,则采取删除和头不一致的行打开  阙辉
                    QhOldCsvDf = QhOpenCsvColCount(QhFlePath=QhCsvPath,Qhencoding="gbk")
                if not isinstance(QhJieGuoDf,str):   # 判断是否是字符串,为字符串则不是DataFrame
                    if QhIsMd5: QhUniqueValue = [QhWeiYiZhiName]  # 如果是MD5去重则以 唯一值 为参考
                    QhJieGuoDf=QhPdCsvUnique(QhOldCsvDf,QhJieGuoDf,QhUniqueValue)   # 合并去重
                # else:
                #     QhJieGuoDf = QhOldCsvDf.copy(deep=True)  # 请求失败则取缓存数据 CSV
            if QhDateSort != "": 
                try:QhDfDateSort(QhJieGuoDf,QhFieldName=QhDateSort,QhFormat="%Y-%m-%d")   # 日期排序
                except:QhDfDateSort(QhJieGuoDf,QhFieldName=QhDateSort,QhFormat="%Y-%m-%d %H:%M:%S")   # 日期排序
                    
            if QhRearCloumn != "": # 重新字段位置排序
                if QhWeiYiZhiName not in QhRearCloumn: QhRearCloumn.insert(0,QhWeiYiZhiName)
                QhJieGuoDf = QhJieGuoDf[QhRearCloumn]  # 重新字段位置排序
            QhJieGuoDf = QhJieGuoDf.drop_duplicates(subset=QhUniqueValue,keep='last',ignore_index=True)  # 去重保留最新,保证第一次也是唯一
            QhJieGuoDf.to_csv(QhCsvPath,encoding='gbk',index=False,errors= 'ignore')
        return QhJieGuoDf
    except:
        QhErrMsg = traceback.format_exc()
        logger.error("【存储CSV】存储失败,报错消息\n{QhErrMsg}!QueHui!".format(QhErrMsg=QhErrMsg))
        # 如果失败了则返回历史数据
        if os.path.exists(QhCsvPath):
            try:
                QhJieGuoDf = pd.read_csv(QhCsvPath,encoding='gbk',low_memory=False)   # 读取旧的数据
            except:
                # 一般情况是列数不一致报错导致的,则采取删除和头不一致的行打开  阙辉
                QhJieGuoDf = QhOpenCsvColCount(QhFlePath=QhCsvPath,Qhencoding="gbk")
            # QhJieGuoDf = pd.read_csv(QhCsvPath,encoding='gbk',low_memory=False)
            return QhJieGuoDf
相关推荐
woshihuanglaoshi11 分钟前
数据迁移与版本管理 - Flutter在鸿蒙平台实现数据库升级策略
数据库·学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
今心上14 分钟前
关于d2l中train_ch3以及softmax中图在pycharm中显示不出来的解决方案
深度学习·机器学习·pycharm
码农学院14 分钟前
GEO与SEO协同:从传统搜索到生成式搜索的平滑迁移路径
服务器·前端·python
程序员羽痕14 分钟前
基于 Django + PyTorch 的中文字体识别系统
pytorch·python·django
java_logo2 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris
GuWenyue7 小时前
写Agent还要重复封装工具?一套MCP多服务方案,3个能力让AI自动查地图、读写文件、操控浏览器
人工智能·机器学习·开源
广州灵眸科技有限公司10 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
大模型码小白10 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
麻雀飞吧11 小时前
最新量化学习路径,交易认知和技术实现要并行
人工智能·python
一只小bit12 小时前
LangGraph 记忆、人机交互、时间旅行和核心能力
机器学习·langchain·人机交互·langgraph