如何用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
相关产品推荐
相关产品推荐

