2013-10-17 67 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