2011-10-13 36 views
0

我試圖格式化一個製表符分隔txt文件,有行和列。我試圖簡單地忽略寫入輸出文件時有空值的行。我通過len(list)方法來做到這一點,如果列表的長度等於列的數量,那麼該行被寫入輸出文件。但是,當我檢查線條的長度時,它們都是一樣的,即使我刪除了空的字符串!非常令人沮喪...爲什麼不從列表中刪除空字符串?

這裏是我的代碼:

import sys, os 

    inputFileName = sys.argv[1] 
    outputFileName = os.path.splitext(inputFileName)[0]+"_edited.txt" 

    try: 
     infile = open(inputFileName,'r') 
     outfile = open(outputFileName, 'w') 
     line = infile.readline() 
     outfile.write(line) 
     for line in infile: 
     lineList = line.split('\t') 
     #print lineList 
     if '' in lineList: 
       lineList.remove('') 
     #if len(lineList) < 9: 
       #print len(lineList) 

       #outfile.write(line) 
     infile.close() 
     #outfile.close() 
    except IOError: 
     print inputFileName, "does not exist." 

感謝您的幫助。當我在交互式窗口中創建一個實驗列表並使用列表中的if''時,它將刪除它。當我運行代碼時,「'仍然存在!

+0

不要針對OP等空白關鍵語言(如Python)編輯Whitespace!這些改變了問題,可以掩蓋問題。 –

回答

1

我認爲一個你的問題是,list.remove僅刪除第一出現的元素。列表中可能還有更多的空字符串。從文檔:

從列表中刪除其值爲x的第一項。如果沒有這樣的項目,這是一個錯誤。

remove all the empty strings from your list您可以使用列表理解來代替。

lineList = [x for x in lineList if x] 

filter與身份功能(通過傳遞None作爲第一個參數):

lineList = filter(None, lineList) 
+1

或者只是'如果x'因爲唯一'False'字符串是一個空字符串。 – agf

+0

@agf:謝謝,更新的答案。 –

+0

太棒了!那樣做了。還有一個問題,如果你不介意。如果我也想忽略負值,那麼無論如何要用一個在字符串中尋找「 - 」的狂野角色來做到這一點?如果我能擺脫它,我寧願不將列表轉換爲浮動。 – Lin

1

我不知道任何巨蟒,但我可以提你不似乎被檢查空格字符。 \ t \ n \ r \ n上的\ r \ n怎麼樣。爲什麼不嘗試修剪線條並檢查其是否'==''

0

以下是用更少的代碼行來問的問題,並且由於調用strip()而刪除了任何類型空白的空行。

#!/usr/bin/env python 

import sys, os 

inputFileName = sys.argv[1] 
outputFileName = os.path.splitext(inputFileName)[0]+"_edited.txt" 

try: 
    infile = open(inputFileName,'r') 
    outfile = open(outputFileName, 'w') 

    for line in infile.readlines(): 
     if line.strip(): 
      outfile.write(line) 

    infile.close() 
    outfile.close() 
except IOError: 
    print inputFileName, "does not exist." 

編輯: 爲了清楚起見,此讀取輸入文件的每行,然後剝離的前緣和後空格(製表符,空格等)的線和寫入非空線到輸出文件中。