2013-07-05 71 views
6

我想讀取CSV文件中的每一行,並將其打印到新文件中。不幸的是,我得到一個空白的行,我無法刪除。每隔一行讀一行並打印到新文件

lines = open('old.csv', "r").readlines()[::2] 
file = open('new.csv', "w") 
n = 0 
for line in lines: 
    n += 1 
    if ((n % 2) == 1): 
      print >> file, line 

我使用的是簡單地望着n的modolus值來決定,如果它的實際每二線或不是代碼。我甚至嘗試過使用strip()rstrip(),它仍佔用空白行。

print >> file, line 

使用print像自動輸出一個新行,要麼使用sys.stdout.write或使用尾隨逗號打壓換行字符,如:

+0

你已經抓住每一行'readlines()[:: 2]' –

回答

11

在回答你的問題,你的空行是來自:

print >> file, line, 

不管怎麼說,更好的方式來處理這個整體是使用itertools.islice爲:

from itertools import islice 

with open('input') as fin, open('output', 'w') as fout: 
    fout.writelines(islice(fin, None, None, 2)) 

,如有必要,過濾掉空行,然後再採取每2從...

non_blanks = (line for line in fin if line.strip()) 
fout.writelines(islice(non_blanks, None, None, 2)) 

更方便,比擺弄模量和這種靈活。

1

試着看看csv文件的python庫。這是相當全面的,應該幫助你做你想做的更乾淨的事情。

1

的建議:清理你的代碼了一下,擺脫需要手動增加並聲明計數器變量,使用:

在枚舉(line_index,線)(線): 。 ..

相關問題