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

Python读取CSV导入DynamoDB时,如何忽略单元格内的逗号?

解决CSV单元格含逗号时的列分割问题

嘿,这个问题我之前处理CSV导入的时候也踩过坑!你现在应该是在手动用逗号分割每行数据吧?这就会把description字段里的逗号当成列分隔符,导致列数不对、数据错位。其实Python标准库的csv模块已经原生支持处理这种情况了,它会自动识别被引号包裹的单元格,忽略里面的分隔符。

修正后的代码示例

我们把读取CSV的逻辑换成csv.DictReader(它能直接把每行映射成字典,和你的col_names、column_types适配起来更方便):

import csv
import boto

def import_csv_to_dynamodb(table_name, csv_file_name, col_names, column_types):
    ''' Import a CSV file to a DynamoDB table '''
    dynamodb_conn = boto.connect_dynamodb(aws_access_key_id=YOUR_ACCESS_KEY, aws_secret_access_key=YOUR_SECRET_KEY)
    table = dynamodb_conn.get_table(table_name)

    # 用csv.DictReader处理带引号的单元格,自动忽略单元格内的逗号
    with open(csv_file_name, 'r', encoding='utf-8') as csv_file:
        # 如果你的CSV第一行是表头,就不用指定fieldnames;如果没有表头,就传fieldnames=col_names
        reader = csv.DictReader(csv_file, fieldnames=col_names)
        # 跳过CSV自带的表头行(如果你的CSV没有表头,就删掉这一行)
        next(reader, None)

        for row in reader:
            # 根据column_types转换对应列的数据类型
            item = {}
            for col, dtype in zip(col_names, column_types):
                item[col] = dtype(row[col])
            
            # 写入DynamoDB表
            table.put_item(data=item)

关键原理说明

  • 按照CSV的规范,当单元格内容包含分隔符(比如逗号)时,会用双引号把整个单元格包裹起来,比如:id,description,price → 1,"This is a test, with commas",10
  • csv模块的reader和DictReader会自动识别这种格式,不会把引号内的逗号当成列分隔符,完美解决你的字段分割错误问题。

额外配置(按需调整)

如果你的CSV用了其他引号字符(比如单引号)或者自定义分隔符,可以在初始化DictReader的时候指定参数:

reader = csv.DictReader(
    csv_file,
    fieldnames=col_names,
    delimiter=',',       # 你的列分隔符
    quotechar="'",       # 包裹含分隔符单元格的字符(比如单引号)
    quoting=csv.QUOTE_ALL# 可选,指定哪些单元格需要被引号包裹
)

这样修改后,description字段里的逗号就不会被误分割啦,导入DynamoDB的数据也会是正确的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:43:07