You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CloudFormation和Cloud9定期将Dataframe转为无分隔符TXT上传至S3?

解决方案

要生成无分隔符的整行文本并上传到S3,可以通过先将DataFrame每行的所有列拼接成单个字符串,再将这些字符串按行写入文本文件的方式实现,替代原to_excel的逻辑。以下是修改后的完整代码:

import awswrangler as wr
import boto3
import os
import pandas as pd
import logging

logger = logging.getLogger(__name__)

def add_partition_cols_to_path(today_date, path):
    # 替换文件后缀为.txt
    path += 'year='+today_date.strftime('%Y')+'/month='+today_date.strftime('%m')+'/day='+today_date.strftime('%d')+'/ITGFSCEP'+ today_date.strftime('%Y') + today_date.strftime('%m') + today_date.strftime('%d') + '.txt'
    return path

def write_file(df, path):
    try:
        if df.empty:
            raise TypeError("Empty Dataframe")
        logger.info('Writing files in:  %s', path) 
        
        # 1. 预处理列格式(按需添加:比如数值补零、日期格式化)
        # 示例:若某数值列需要固定6位,补前导零:df['num_col'] = df['num_col'].astype(str).str.zfill(6)
        # 处理空值:df = df.fillna('')
        
        # 2. 将每行所有列转为字符串后拼接成无分隔符的整行内容
        txt_lines = df.astype(str).agg(''.join, axis=1)
        # 3. 将所有行拼接为带换行符的完整文本
        txt_content = '\n'.join(txt_lines)
        
        # 4. 使用awswrangler上传到S3,和原to_excel用法保持一致
        wr.s3.to_text(txt_content, path)
    except Exception as e:
        logger.error("Error writing files: %s", e)
        raise e

关键注意点

  • 列格式预处理:如果DataFrame包含数值、日期等非字符串类型列,必须先将其格式化为符合要求的字符串(比如数值补前导零、日期转指定格式),否则拼接后会出现不符合预期的内容。
  • 空值处理:若存在缺失值,建议提前用df.fillna('')将空值替换为空字符串,避免拼接后出现NaN等无效字符。
  • 备选上传方式:如果不想用wr.s3.to_text,也可以直接用boto3客户端上传:
    s3_client = boto3.client('s3')
    bucket_name, s3_key = wr.s3.parse_path(path)
    s3_client.put_object(Bucket=bucket_name, Key=s3_key, Body=txt_content.encode('utf-8'))
    

内容的提问来源于stack exchange,提问作者fervifervi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 15:52:35