заморачивался недавно этим вопросом, точнее - как быстрее пробежаться по строкам
на стекофервло есть 2-3 топика с советами: там и читать чанками/чунками
и читаь binary с проскакиванием переводов строк, и этот fseek (ну он про чанки же и есть)
на 80 млрд строк не нашлось ничего эффективнее как вы в начале и написали
with open(csvfile, encoding='utf-8-sig') as f:
fr = csv.reader(f, delimiter=';')
for i, row in enumerate(fr):
if i < 21721482:
continue
foobar(row)
единственное - я читаю сначала просто файл построчно,
а потом к строке применяю csv dialect - ибо в строках могут быть переводы или кодировка что сломает csv массив