If your blanks are always on the first line, then Marius' answer is simplest. If you have n
blanks at the beginning or you just want to skip some number of lines you can use itertools.islice()
.
Skip first N lines
Suppose you want to skip over the first 4
lines (blank lines or not):
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:
...
Blank lines throughout
If you have blank lines scattered throughout your files then you can filter them out with 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 '
'
filt_f1 = filterfalse(lambda line: line.startswith('
'), f1)
filt_f2 = filterfalse(lambda line: line.startswith('
'), 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)
Where csv1.csv is:
time,name,location
12345,Jean,Montreal
12346,Peter,Chicago
1234589,Doug,Boston
and csv2.csv (note: not shown here, but csv2.csv has 4 blank lines at the top of the file):
123457,Scott,San Diego
123458,Jen,Miami
123459,Robert,Sacramento
output out.csv does not have blank lines throughout:
time,name,location
12345,Jean,Montreal
12346,Peter,Chicago
1234589,Doug,Boston
123457,Scott,San Diego
123458,Jen,Miami
123459,Robert,Sacramento