S3存储桶中data.dat文件逐行读取方法问询
如何逐行读取S3存储桶中的文件内容
嘿,这个问题我太熟悉了!你现在的代码是把整个文件内容一次性读取成了一个完整的字符串,所以用for i in contentsins3循环的时候,自然会逐个字符遍历啦。给你两种实用的解决办法,按需选择:
方法一:基于现有代码修改,分割字符串为行列表
如果你已经习惯了先把整个文件读进来,只需要把读取到的字符串用splitlines()方法分割成每行的列表就行——这个方法能自动处理不同操作系统的换行符(比如\n或者\r\n),比手动用split('\n')更靠谱:
objectcontent = s3.get_object(Bucket="contents-bucket", Key=obj['Key']) contentsins3 = objectcontent['Body'].read().decode('utf-8') # 分割为每行的列表,直接循环即可 for line in contentsins3.splitlines(): print(line)
方法二:直接迭代类文件对象(更适合大文件)
S3返回的Body其实是一个类文件对象,支持逐行迭代,不用一次性把整个文件加载到内存里,处理大文件的时候更节省资源:
objectcontent = s3.get_object(Bucket="contents-bucket", Key=obj['Key']) # 直接迭代Body,每次读取一行字节,解码后输出 for line in objectcontent['Body']: # 可以用strip('\n')去掉末尾的换行符,也可以保留根据需求调整 print(line.decode('utf-8').strip('\n'))
简单说,小文件用方法一够方便,大文件优先选方法二更高效~
内容的提问来源于stack exchange,提问作者Crazywolf
相关产品推荐
相关产品推荐

