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

Python脚本写入SQL文件时字符串中间莫名添加换行符求助

问题排查与解决方案

你的问题跟write方法没关系,核心是读取用户文件时没处理每行末尾的换行符,再加上循环逻辑的小问题,导致生成的SQL出现异常换行和语法问题。

问题根源分析

  1. 换行符残留:用for i in user_file读取每行时,每行末尾的\n(换行符)会被一起读进users_list,当你用format(i)把它拼进SQL字符串时,这个换行符就会被写入文件,造成你看到的换行问题。
  2. 循环逻辑冗余:你开头已经把users_list[0]拼进了SQL,后面循环又遍历整个列表,导致第一个用户被重复写入;而且循环最后会多写一个OR,直接导致SQL语法错误。

修正后的代码

我调整了代码逻辑,同时优化了SQL写法(用IN代替一堆OR,更简洁高效):

users_list = []
users = input("Enter user file name (without .txt): ")

# 用with语句自动管理文件,避免忘记关闭
with open(f"{users}.txt", "r") as user_file:
    for line in user_file:
        # 去掉换行符和前后多余空格,同时跳过空行
        username = line.strip()
        if username:
            users_list.append(username)

# 生成SQL文件
with open("sql.txt", "w") as sql_file:
    if users_list:
        # 把所有用户名转成带单引号的格式,用逗号分隔
        quoted_users = "', '".join(users_list)
        sql_query = f"""SELECT MACHINE.NAME AS SYSTEM_NAME, SYSTEM_DESCRIPTION, MACHINE.IP, MACHINE.MAC, MACHINE.ID as TOPIC_ID
FROM MACHINE
WHERE MACHINE.USER_NAME IN ('{quoted_users}')"""
        sql_file.write(sql_query)
    else:
        print("No valid usernames found in the input file.")

关键改动说明

  • 处理换行符:用strip()去掉每行的换行符和前后空白,确保用户名干净无多余字符。
  • 文件安全管理:用with语句打开文件,Python会自动在代码块结束后关闭文件,避免资源泄漏。
  • 优化SQL写法:用IN子句代替多个OR,不仅代码更简洁,数据库执行效率也更高。
  • 空值处理:加入了空行判断和空列表判断,避免生成无效的SQL语句。

补充小提示

如果你的用户文件里有包含单引号的用户名(比如O'Neil),直接用上面的方法会导致SQL语法错误,这时候可以转义单引号(把'换成'')来处理,只需把username = line.strip()改成username = line.strip().replace("'", "''")即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:01:33