Python脚本写入SQL文件时字符串中间莫名添加换行符求助
问题排查与解决方案
你的问题跟write方法没关系,核心是读取用户文件时没处理每行末尾的换行符,再加上循环逻辑的小问题,导致生成的SQL出现异常换行和语法问题。
问题根源分析
- 换行符残留:用
for i in user_file读取每行时,每行末尾的\n(换行符)会被一起读进users_list,当你用format(i)把它拼进SQL字符串时,这个换行符就会被写入文件,造成你看到的换行问题。 - 循环逻辑冗余:你开头已经把
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
相关产品推荐
相关产品推荐

