2014-06-13 65 views
-1

我正在執行配置單元查詢並將輸出存儲在本地FS中的tsv文件中。我爲配置單元查詢運行for循環並傳遞不同的參數。如果配置單元查詢在for循環中不返回任何輸出,它將在tsv文件中輸出一個空行。這導致NULL值被推送到我的數據庫在後端。因此,在for循環運行並創建文件後 - 我有下面的代碼來刪除所有打印的空行,但它不起作用。使用python從配置單元查詢輸出中刪除空行

如何從此文件中刪除空行?

` 395.9 429.61 PT 
         ` 

代碼:

with open('file.tsv','r+w') as file: 
     for line in file: 
      if line.strip(): 
      file.write(line) 

感謝

+0

爲什麼我得到一個downvote - @至點擊還是不點擊 – rond

+0

,其實不是我 –

+0

我剛剛來編輯你的格式...我可以通過投票取消投票,或者我可以投票來證明我之前沒有投票。 –

回答

0

通常你打開輸入文件,並寫入非空行的第二個文件:

with open('file.tsv') as infile, open('filtered_file.tsv', 'w') as outfile: 
    for line in infile: 
     if line.strip(): 
      outfile.write(line) 

如果你想要過濾文件,您可以使用FileInputinplace選項:

import fileinput 
for line in fileinput.FileInput("infile", inplace=1): 
    if line.strip(): 
     print line 

但是,它使用中間文件,可能無法在磁盤空間不足的情況下工作。

要過濾的文件就地而不分配任何額外的磁盤空間,你可以嘗試這樣的事:

with open('file.tsv', 'r+') as infile: 
    read_pos = write_pos = 0 
    line = infile.readline() 
    while line: 
     read_pos += len(line) 
     if line.strip(): 
      infile.seek(write_pos) 
      infile.write(line) 
      write_pos += len(line) 
     infile.seek(read_pos) 
     line = infile.readline() 
    # update file size to the new, possibly reduced, size 
    infile.truncate(write_pos)