我正在努力寻找正确的方法来读取和解析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实现它。
使用s3obj.get()可以在s3对象上执行csv.reader函数而不是显式打开文件吗?
请原谅我的无知仍在学习编程,所有任何解释都会非常有用
答案 0 :(得分:1)
s3obj.get()
会返回dict
个回复。您必须从响应中获取Body
,即对象数据(StreamingBody)。
s3obj = s3.Object('mybucket','myfile')
content = s3obj.get()['Body']
但是这个StreamingBody仅支持read()
,它不支持csv.reader()
所需的迭代器协议。
答案 1 :(得分:0)
通过在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)
答案 2 :(得分:0)
上一个答案的效果很好,但有时会出现以下错误:
'utf-8'编解码器无法解码位置127的字节0xf3:无效的继续字节
如果是这样,请尝试:
filedata.decode('ISO-8859-1').count('\n')-1