在CSV文件中跳过标题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在CSV文件中跳过标题相关的知识,希望对你有一定的参考价值。

我正在使用lambda函数从csv文件中添加数据,数据被添加了,但是在dynamodb中我的表中有一个错误,我看到我的表头也有一行,这是我的代码。

import boto3
s3=boto3.client("s3")

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('maysales')

def lambda_handler(event, context):
    bucketna=event['Records'][0]['s3']['bucket']['name']
    s3_name=event['Records'][0]['s3']['object']['key']
    response=s3.get_object(Bucket=bucketn,Key=s3_name)
    data=response['Body'].read().decode("utf-8")
    salesnbs=data.split("
")
    for ko in salesnbs:
        kos=ko.split(",")
        table.put_item(
            Item = { 
            "Date": kos[0],
            "name": kos[1],
            "fam": kos[2],
            "locati": kos[3],
            "adress": kos[4],
            "country": kos[5],
            "city": kos[6]
        })

我的表已经包含了头文件。

答案

大多数CSV文件的第一行包含了标题标签,如果你不想把这行添加到你的dynamodb表中,你需要在开始插入之前跳过第一行,即

row = 0
for ko in salesnbs:
    if row == 0:
       continue # don't process this line

    row = row + 1
    kos=ko.split(",")
    table.put_item(
        Item = { 
        "Date": kos[0],
        "name": kos[1],
        "fam": kos[2],
        "locati": kos[3],
        "adress": kos[4],
        "country": kos[5],
        "city": kos[6]
    })

(语法可能不是100%正确,但这是我的想法)

另一答案

从描述中看不太清楚是什么问题,但我建议使用Python的内置模块 csv 来处理CSV数据。这样你就不需要担心标题和将文件分割成列,因为模块提供了相关的工具。

import csv
...

# Here you can also specify delimiter if need be
reader = csv.DictReader(response['Body'])
for row in reader:
    table.put_item(
            Item = { 
            "Date": row["Date"],
            "name": row["name"],
            "fam": row["fam"],
            ...
        })

模块使用文件的第一行作为列名。

另一答案

使用boto3客户端代替resource.Install。dynamodb-json

from dynamodb_json import json_util as dynamo_json
import json
import boto3
s3=boto3.client("s3")

dynamodb = boto3.client('dynamodb')

def lambda_handler(event, context):
    bucketna=event['Records'][0]['s3']['bucket']['name']
    s3_name=event['Records'][0]['s3']['object']['key']
    response=s3.get_object(Bucket=bucketn,Key=s3_name)
    data=response['Body'].read().decode("utf-8")
    salesnbs=data.split("
")
    for ko in salesnbs:
        kos=ko.split(",")
        data = { 
            "Date": kos[0],
            "name": kos[1],
            "fam": kos[2],
            "locati": kos[3],
            "adress": kos[4],
            "country": kos[5],
            "city": kos[6]
        }
       client.put_item(TableName='maysales',Item=json.loads(dynamo_json.dumps(data)))

以上是关于在CSV文件中跳过标题的主要内容,如果未能解决你的问题,请参考以下文章

在 Yii2 中跳过 CSV 文件的第一行

在 MS Access 中跳过 CSV 文件的前三行(使用 DoCmd?)

Python 3.2 在 csv.DictReader 中跳过一行

在 Fortran90 中从文本文件中跳过一行

在 Q Promises 中跳过 then 函数的正确方法

如何跳过 CSV 中的第一行项目?