我在Lambda中用python编写了一个程序,从S3中读取CSV,然后添加一些信息并将其存储到S3中的另一个CSV中
原始CSV中的初始行如下所示:
2020-04-23 00:00:00,pass,7481.15000000,7480.12000000
当我尝试阅读、添加一些信息并将其存储到S3中的第二个CSV中时,结果如下:
"b'[2020-04-21 00:00:00,pass],[2020-04-21 00:00:00,pass],[2020-04-21 00:00:00,pass],[2020-04-22 00:00:00,pass,7126.77000000,7126.56000000]\r'",b'',"[b'2020-04-23 00:00:00,pass,7481.15000000,7480.12000000\r', b'']"
显然b'
和\r''b''
也是如此
代码如下所示:
def fetch_data_from_s3(filename):
s3 = boto3.client('s3')
csvfile = s3.get_object(Bucket='thisbuckername', Key=filename)
csvcontent = csvfile['Body'].read().split(b'\n')
return csvcontent
def write_data_to_s3(filename, row):
s3 = boto3.client('s3')
csvio = io.StringIO()
writer = csv.writer(csvio)
writer.writerow(row)
s3.put_object(Body=csvio.getvalue(), ContentType='text/csv', Bucket='thisbucketname', Key=filename)
csvio.close()
def lambda_handler(event, context):
historical = fetch_data_from_s3('compiled.csv')
last = fetch_data_from_s3('original.csv')
historical.append(last)
write_data_to_s3('compiled.csv', historical)
编码有什么问题吗?谢谢
通常,当文件被打开以写入字符串时,会显示“b'stuff'”,但发送的数据是字节。使用io.StringIO()而不是字节有什么原因吗
许多编辑器和文件类型以“\r\n”结尾行,这是回车符和换行符。发生这种情况的原因很多,特别是当您有internet文件,或者来自windows和linux的文件正在转换时。在windows中只有一个字节表示“向下移动光标并移到行首”,在linux中有两个字节“\n”(向下移动光标)和“\r”(将光标移到行首)。这就是为什么在linux中可以覆盖打印行(在大多数终端中):
您应该使用str.strip()来确保没有任何尾随“\r”或“\n”。下面是一个示例:
相关问题 更多 >
编程相关推荐