Python脚本执行后意外给所有行添加换行符问题
问题:3proxy配置文件修改后所有行被空行分隔
执行Python脚本修改3proxy.cfg后,文件内所有行都被空行分隔,尝试调整\r、\n、\r\n等换行符均无法解决问题。
原脚本代码
import sys import fileinput nameuser = "users1" psuser = "pass1" file_name = '/usr/local/etc/3proxy.cfg' for line in fileinput.FileInput(file_name,inplace=1): if 'auth strong' in line: line = line.replace(line, line+'########################################################################## '+ nameuser +' ##########################################################################'+'\r' + 'users '+ nameuser +':CL:'+ psuser +'\r'+ 'allow login,'+ nameuser +'\r''flush') print (line)
处理前的3proxy.cfg内容
daemon nserver 11111 nserver 22222 nscache 65536 timeouts 1 5 30 60 180 1800 15 60 log /var/log/3proxy/log D logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T" logformat "L%t.%. %N.%p %E %U %C:%c %R:%r %Q:%q %O %I %h %T %n " rotate 360 #external 0.0.0.0 #internal 0.0.0.0 auth strong deny * maxconn 254 setgid 65534 setuid 65534
问题原因
fileinput读取的每一行line本身已包含换行符(\n),而Python的print()函数默认会在输出末尾追加一个\n,导致每行实际输出两个换行符,形成空行分隔。- 原脚本仅对包含
auth strong的行执行print,未处理其他行,会导致这些行被从文件中删除(inplace=1模式下,未被print的行不会保留)。
修复方案
修改脚本,解决换行重复问题,并确保所有行都被输出:
import sys import fileinput nameuser = "users1" psuser = "pass1" file_name = '/usr/local/etc/3proxy.cfg' for line in fileinput.FileInput(file_name, inplace=1): # 移除原行末尾的换行符,避免重复输出 line = line.rstrip('\r\n') if 'auth strong' in line: # 用f-string格式化新内容,自然换行更易读 new_content = f'''{line} ########################################################################## {nameuser} ########################################################################## users {nameuser}:CL:{psuser} allow login,{nameuser} flush''' print(new_content) else: # 输出原行,避免丢失非目标行 print(line)
关键修改点
- 用
rstrip('\r\n')清除原行自带的换行符,避免与print默认追加的换行符重复。 - 使用f-string拼接新内容,直接用换行符分隔新行,避免手动拼接转义字符出错。
- 添加
else分支,保证原文件中所有非目标行都能被正常保留。 - 替换原脚本中的
\r为标准换行符\n(Linux系统默认用\n,Windows系统可改为\r\n)。
内容的提问来源于stack exchange,提问作者Андрей
相关产品推荐
相关产品推荐

