从文本文件输出python 3中删除空行

从文本文件输出python 3中删除空行,python,text,edit,Python,Text,Edit,我用Python3编写了一个程序,编辑一个文本文件,并将编辑后的版本输出到一个新的文本文件。但是新文件中有我无法拥有的空白行,我也不知道如何去除它们 提前谢谢 newData = "" i=0 run=1 j=0 k=1 seqFile = open('temp100.txt', 'r') seqData = seqFile.readlines() while i < 26: sLine = seqData[j] editLine = seqData[k] tempLine = edi

我用Python3编写了一个程序,编辑一个文本文件,并将编辑后的版本输出到一个新的文本文件。但是新文件中有我无法拥有的空白行,我也不知道如何去除它们

提前谢谢

newData = ""
i=0
run=1
j=0
k=1
seqFile = open('temp100.txt', 'r')
seqData = seqFile.readlines()

while i < 26:
sLine = seqData[j] 
editLine = seqData[k]
tempLine = editLine[0:20]
newLine = editLine.replace(editLine, tempLine)
newData = newData+sLine+'\n'+newLine+'\n'
i=i+1
j=j+2
k=k+2
run=run+1

seqFile.close()

new100 = open("new100a.fastq", "w")
sys.stdout = new100
print(newData)
newData=“”
i=0
运行=1
j=0
k=1
seqFile=open('temp100.txt','r')
seqData=seqFile.readlines()
而我<26:
sLine=seqData[j]
editLine=seqData[k]
模板行=编辑行[0:20]
换行符=编辑行。替换(编辑行,模板行)
newData=newData+sLine+'\n'+newLine+'\n'
i=i+1
j=j+2
k=k+2
运行=运行+1
seqFile.close()
new100=打开(“new100a.fastq”,“w”)
sys.stdout=new100
打印(新数据)

sLine
已包含换行符<如果
editLine
短于或等于20个字符,则code>newLine也将包含一个新行。你可以改变

newData=newData+sLine+'\n'+newLine+'\n'

newData=newData+sLine+newLine

如果
editLine
长度超过20个字符,则在执行
tempLine=editLine[0:20]
操作时,尾随换行符将被截断,并且您需要将换行符附加到
newData

根据python(readlines使用),每行中都保留了尾随的换行符:

从文件中读取一整行。后面的换行符是 保留在字符串中(但当文件以 不完整行)。[6] 如果size参数存在并且 非负,它是最大字节数(包括尾随字节) 换行符)并且可能返回不完整的行。当大小不是0时, 只有在立即遇到EOF时,才会返回空字符串


一般来说,当出现意外行为时,通过打印变量的值,调试程序通常会有很长的路要走。例如,使用
print repr(sLine)
打印
sLine
会显示其中有一个尾随换行符

问题在这一行:

newData = newData+sLine+'\n'+newLine+'\n'

sLine
已包含换行符,因此应删除第一个“\n”。如果
换行符
的长度小于20,则
换行符
也包含该换行符。在其他情况下,您应该向其添加换行符

试试这个:

newData = newData + sLine + newLine
if len(seqData[k]) > 20:
   newData += '\n'

不需要猜测,并且尝试通过根据未经确认的猜测更改内容来调试代码对于新手来说并不是一个了解自己在做什么的好方法。指向,它清楚地表明尾随的换行符保留在字符串中,或者解释如何检查它(例如,
print(repr(seqData[0]))
),而不是建议他在不知道自己在处理什么的情况下更改它。我应该在回答中更透彻一些。我现在已经更新了。回答得不错。只对每一行进行
rstrip
并无条件地添加
\n
可能会更简单一些,而不是试图找出换行是否被切片截断……但是您已经解释得足够多,OP应该能够按照自己的意愿解决问题。这些代码中的大部分似乎没有任何用处。例如,
editLine.replace(editLine,tempLine)
只能提供
tempLine
。你想在那里做些不同的事吗?还有,为什么你重定向stdout只是为了写入一个文件,而不是调用
new100.write
?太棒了!这正是我所需要的。非常感谢。