You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无表头CSV按首列标识分存至不同SQL表的Python实现需求

解决方案:Python读取多格式CSV并导入不同SQL表

核心思路

按行读取以|为分隔符的无表头CSV,根据首列标识(H/D/F)分类行数据,再分别插入对应SQL表。以下示例以SQLite为例,若使用MySQL/PostgreSQL,仅需调整数据库连接逻辑。

步骤1:准备工作

  • 确保VS Code中配置好Python环境,内置sqlite3可直接使用;若用其他数据库,需提前安装对应驱动(如pymysql/psycopg2)
  • 将目标CSV文件置于Python脚本同目录,或在代码中填写完整文件路径

步骤2:代码实现

1. 导入依赖

import csv
import sqlite3

2. 初始化数据库与表结构

根据示例数据的列数创建对应表,字段名可根据实际业务需求修改:

# 连接SQLite数据库(替换为对应数据库的连接代码即可适配其他库)
conn = sqlite3.connect('data.db')
cursor = conn.cursor()

# 创建H标识对应的表(示例行含15列)
cursor.execute('''
CREATE TABLE IF NOT EXISTS table_h (
    id TEXT,
    col1 TEXT,
    col2 TEXT,
    col3 REAL,
    col4 TEXT,
    col5 TEXT,
    col6 REAL,
    col7 TEXT,
    col8 TEXT,
    col9 TEXT,
    col10 TEXT,
    col11 TEXT,
    col12 TEXT,
    col13 TEXT,
    col14 TEXT
)
''')

# 创建D标识对应的表(示例行含41列)
cursor.execute('''
CREATE TABLE IF NOT EXISTS table_d (
    id TEXT,
    col1 TEXT,
    col2 TEXT,
    col3 TEXT,
    col4 TEXT,
    col5 TEXT,
    col6 TEXT,
    col7 TEXT,
    col8 TEXT,
    col9 TEXT,
    col10 TEXT,
    col11 TEXT,
    col12 TEXT,
    col13 TEXT,
    col14 TEXT,
    col15 TEXT,
    col16 TEXT,
    col17 TEXT,
    col18 TEXT,
    col19 TEXT,
    col20 TEXT,
    col21 TEXT,
    col22 TEXT,
    col23 TEXT,
    col24 TEXT,
    col25 TEXT,
    col26 TEXT,
    col27 TEXT,
    col28 TEXT,
    col29 TEXT,
    col30 TEXT,
    col31 TEXT,
    col32 TEXT,
    col33 TEXT,
    col34 TEXT,
    col35 TEXT,
    col36 TEXT,
    col37 TEXT,
    col38 TEXT,
    col39 TEXT,
    col40 TEXT,
    col41 TEXT
)
''')

# 创建F标识对应的表(示例行含7列)
cursor.execute('''
CREATE TABLE IF NOT EXISTS table_f (
    id TEXT,
    col1 TEXT,
    col2 TEXT,
    col3 TEXT,
    col4 TEXT,
    col5 TEXT,
    col6 TEXT
)
''')

conn.commit()

3. 读取CSV并插入数据

# 读取CSV文件,指定分隔符为|
with open('your_file.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f, delimiter='|')
    for row in reader:
        # 跳过空行
        if not row:
            continue
        # 根据首列标识分发数据
        identifier = row[0]
        if identifier == 'H':
            placeholders = ','.join(['?'] * len(row))
            cursor.execute(f'INSERT INTO table_h VALUES ({placeholders})', row)
        elif identifier == 'D':
            placeholders = ','.join(['?'] * len(row))
            cursor.execute(f'INSERT INTO table_d VALUES ({placeholders})', row)
        elif identifier == 'F':
            placeholders = ','.join(['?'] * len(row))
            cursor.execute(f'INSERT INTO table_f VALUES ({placeholders})', row)

conn.commit()
conn.close()

注意事项

  • 替换代码中的your_file.csv为实际文件名
  • 若适配MySQL,替换连接逻辑为:
    import pymysql
    conn = pymysql.connect(host='localhost', user='你的用户名', password='你的密码', db='目标数据库')
    
  • 表的字段数量需与对应标识行的列数完全匹配,空值会自动插入为NULL
  • 处理超大文件时,建议每读取N行就执行一次conn.commit(),避免内存占用过高

内容的提问来源于stack exchange,提问作者Anonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 09:27:37