如果你的空白總是在第一那麼Marius的回答是最簡單的。如果您在開始處有空白,或者您只想跳過一些行數,則可以使用itertools.islice()
。
跳到第N行
假設你要跳過第一4
行(空行或不):
from itertools import islice
with open('csv2.csv', 'r') as f1, open('out.csv', 'w') as out:
filt_f1 = islice(f1, 4, None)
r1 = csv.reader(filt_f1)
wr = csv.writer(out)
for line in r1:
...
空白行整個
如果你有空白行散佈在整個文件中,然後您可以使用itertools.filterfalse
將其過濾掉。
import csv
from itertools import filterfalse
from itertools import chain
with open('csv1.csv', 'r') as f1, open('csv2.csv', 'r') as f2, open('out.csv', 'w') as out:
# create an iterator without lines that start with '\n'
filt_f1 = filterfalse(lambda line: line.startswith('\n'), f1)
filt_f2 = filterfalse(lambda line: line.startswith('\n'), f2)
# csv.reader consumes the filtered iterators
r1, r2 = csv.reader(filt_f1), csv.reader(filt_f2)
wr = csv.writer(out)
# here insert your logic, I just write both to the same file
for line in chain(r1, r2):
wr.writerow(line)
其中csv1.csv是:
time,name,location
12345,Jean,Montreal
12346,Peter,Chicago
1234589,Doug,Boston
和csv2.csv(注:這裏沒有顯示,但在文件的頂部csv2.csv有4個空行):
123457,Scott,San Diego
123458,Jen,Miami
123459,Robert,Sacramento
輸出out.csv沒有空行遍佈:
time,name,location
12345,Jean,Montreal
12346,Peter,Chicago
1234589,Doug,Boston
123457,Scott,San Diego
123458,Jen,Miami
123459,Robert,Sacramento
你的csv文件實際上是什麼樣子的?你能編輯幾行例子,包括空行嗎?另外,你得到的具體錯誤是什麼,Python是否會引發異常,或者你只是沒有得到你想要的結果? – Marius
csv的第一行是空行。我得到的錯誤是IndexError:列表索引超出範圍。如果我手動刪除第一個空白行並運行,我沒有得到任何錯誤。 –