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

如何用Python多次写入文件并保持内容为单行(超40k字符)

实现方案

1. 安装依赖

首先安装所需的Python库:

pip install oracledb paramiko
  • oracledb:Oracle官方推荐的数据库驱动,用于连接Oracle并读取数据(替代旧版cx_Oracle)
  • paramiko:用于SFTP协议的文件上传操作

2. 读取Oracle数据库数据

通过oracledb建立数据库连接,查询目标数字数据并提取为字符串列表(数据量仅对应48k文件,内存压力可忽略):

import oracledb

# Oracle连接配置,替换为实际信息
db_config = {
    "user": "your_db_user",
    "password": "your_db_pwd",
    "dsn": "db_host:db_port/service_name"
}

def get_target_numbers():
    with oracledb.connect(**db_config) as conn:
        with conn.cursor() as cur:
            # 替换为你的实际查询语句,确保仅返回目标数字列
            cur.execute("SELECT target_num_col FROM your_table WHERE filter_condition")
            # 将查询结果转为字符串列表,方便后续拼接
            numbers = [str(row[0]) for row in cur.fetchall()]
    return numbers

3. 生成指定格式的单行文件

Python文件写入无行长度限制,直接拼接成要求的格式并写入文件:

def generate_output_file(numbers, alpha_code="an_alpa_code", file_path="./transfer_data.txt"):
    # 拼接成要求的单行格式
    file_content = f"{alpha_code}:{','.join(numbers)}"
    # 写入文件,指定utf-8编码保证兼容性
    with open(file_path, "w", encoding="utf-8") as f:
        f.write(file_content)
    print(f"目标文件已生成:{file_path}")

4. 上传文件至SFTP站点

使用paramiko实现SFTP上传,支持密码或密钥两种认证方式:

import paramiko

def upload_to_sftp(local_file, sftp_config):
    ssh_client = paramiko.SSHClient()
    # 生产环境建议手动配置known_hosts验证服务器身份,此处为测试用自动添加策略
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        ssh_client.connect(
            hostname=sftp_config["host"],
            port=sftp_config.get("port", 22),
            username=sftp_config["user"],
            password=sftp_config.get("password"),
            key_filename=sftp_config.get("key_filename")  # 密钥认证时启用此参数
        )
        with ssh_client.open_sftp() as sftp:
            # 上传文件到SFTP指定路径
            sftp.put(local_file, sftp_config["remote_path"])
        print(f"文件已上传至SFTP:{sftp_config['remote_path']}")
    finally:
        ssh_client.close()

5. 整合执行流程

将上述模块整合,完成从取数到上传的全流程:

if __name__ == "__main__":
    # 1. 从Oracle读取数据
    target_numbers = get_target_numbers()
    # 2. 生成目标格式文件
    output_file_path = "./transfer_data.txt"
    generate_output_file(target_numbers, file_path=output_file_path)
    # 3. 上传至SFTP,替换为实际SFTP配置
    sftp_config = {
        "host": "sftp.your-server.com",
        "port": 22,
        "user": "sftp_user",
        "password": "sftp_pwd",
        # "key_filename": "/path/to/your/private_key",  # 密钥认证时启用
        "remote_path": "/remote/dir/transfer_data.txt"
    }
    upload_to_sftp(output_file_path, sftp_config)

关键注意事项

  • Oracle驱动:oracledb默认使用thin模式,无需额外安装Oracle客户端,适配Python 3.7+版本
  • 行长度:Python原生文件写入无32k行长度限制,完全支持生成48k的单行文件
  • SFTP安全:生产环境优先使用密钥认证替代密码认证,同时禁用AutoAddPolicy,手动维护known_hosts文件验证服务器身份

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:15:32