首页 文章

使用boto3 python计算s3中csv文件的行数

提问于
浏览
1

我正在努力找到正确的方法来读取和解析csv文件,以便输出文件中包含的行数

我试图弄清楚使用不同的方法,但我有点难过

import boto3, botocore, csv

s3 = boto3.resource('s3')
s3obj = s3.Object('mybucket','myfile')

with s3obj.get() as f:
    reader=csv.reader(f,delimter=",")
    data=list(reader)
    row_count=len(date)

这显然不起作用,因为1,语法错误或数字2我不知道我在做什么 . 我正在引用这篇文章,并尝试使用s3实现它 .

Row count in a csv file

而不是显式打开文件可以使用s3obj.get()在s3对象上执行csv.reader函数?

请原谅我仍然学习编程的无知,所以任何解释都会非常有帮助

3 回答

  • 0

    s3obj.get() 返回 dict 响应 . 您必须从响应中获取 Body ,即对象数据(StreamingBody) .

    s3obj = s3.Object('mybucket','myfile')
    content = s3obj.get()['Body']
    

    但是这个StreamingBody只支持 read() ,它不支持 csv.reader() 所需的迭代器协议 .

  • 1

    通过在python中使用常规计数方法,我能够获得所需的结果:

    import boto3, botocore
    
    s3 = boto3.resource('s3')
    s3obj = s3.Object( 'mybucket', 'myfile')
    
    filedata= s3obj.get()["Body"].read()
    
    
    print (filedata.decode('utf8').count('\n')-1)
    
  • 0

    以前的答案效果很好,但有时会出现以下错误:

    'utf-8'编解码器无法解码位置127中的字节0xf3:无效的连续字节

    如果是这样,请尝试:

    filedata.decode('ISO-8859-1').count('\n')-1
    

相关问题