2013-10-17 68 views
0

我在python 3中编写了一个程序,用于编辑一个文本文件,并将编辑好的版本输出到一个新的文本文件中。但新文件有空白的行,我不能有,我不知道如何摆脱它们。从文本文件输出中删除空行python 3

在此先感谢。

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) 
+0

大部分代码似乎并没有做任何有用的。例如,'editLine.replace(editLine,tempLine)'不能给你任何东西,只有'tempLine'。你是否想在那里做一些不同的事情?另外,为什么你重定向'stdout'只是为了写入文件,而不是调用'new100.write'? – abarnert

回答

1

问题是在这一行:

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

sLine已经包含换行符号,所以你应该删除第一个 '\ n'。如果newLine的长度小于20,则newLine也包含换行符。在其他情况下,您应该添加换行符号。

试试这个:

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

完美!这工作正是我需要它。非常感谢你。 –

1

sLine已经包含换行符。如果editLine短于或等于20个字符,newLine也将包含换行符。您可以更改

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

newData = newData+sLine+newLine

editLine超过20个字符长的情况下,当你做tempLine = editLine[0:20]其后的换行符将被切断,您将需要追加自己换行到newData

根据蟒documentation on readline(其用于通过readlines方法),尾随换行保存在每一行:

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

一般来说,当你发现意想不到的行为时,通常可以通过打印变量的值来调试程序。例如,打印sLineprint repr(sLine)会告诉你,那里有一个尾随的换行符。

+1

有没有必要猜测,并尝试通过改变基于未经证实的猜测的事情来调试代码对于新手来说并不是学习他在做什么的好方法。指向[文档](http://docs.python.org/2/library/stdtypes.html#file.readlines),它清楚地表明尾随的换行符保存在字符串中,或​​解释如何检查它(例如,'print(repr(seqData [0]))'),而不是暗示他在不知道他在处理什么的情况下改变它。 – abarnert

+0

我的答案应该更彻底。我现在更新了它。 –

+0

很好的答案。对每行进行“rstrip”并无条件地添加“\ n”可能会更简单一些,而不是试图弄清新行是否被切片切断了......但您已经足够解释OP应该是无论如何他都能解决问题。 – abarnert