прочитать определенную строку в файле csv, python

В файле CSV с python мы можем читать весь файл построчно или построчно, я хочу прочитать определенную строку (пример строки номер 24), не читая весь файл и все строки.


person user3967257    schedule 21.06.2015    source источник
comment
возможный дубликат Начать чтение и запись в определенной строке в CSV с помощью Python   -  person GhitaB    schedule 21.06.2015


Ответы (2)


Вы можете использовать linecache.getline:

linecache.getline(имя файла, номер_строки[, module_globals])

Получить строку lineno из файла с именем имя_файла. Эта функция никогда не вызовет исключение — она вернет '' при ошибках (для найденных строк будет включен завершающий символ новой строки).

import linecache


line = linecache.getline("foo.csv",24)

Или используйте рецепт потребления из itertools для перемещения указателя:

import collections
from itertools import islice

def consume(iterator, n):
    "Advance the iterator n-steps ahead. If n is none, consume entirely."
    # Use functions that consume iterators at C speed.
    if n is None:
        # feed the entire iterator into a zero-length deque
        collections.deque(iterator, maxlen=0)
    else:
        # advance to the empty slice starting at position n
        next(islice(iterator, n, n), None)

with open("foo.csv") as f:
    consume(f,23)
    line = next(f)
person Padraic Cunningham    schedule 21.06.2015
comment
@xtofl, файловый объект является своим собственным итератором, когда вы for line in f:... неоднократно вызываете next - person Padraic Cunningham; 21.06.2015
comment
а начинать чтение с конкретной строки а не с начала? он работает, просто потребляя (f, X) и увеличивая X каждый раз (инициализируя X в нужной позиции), спасибо за ваш полезный ответ :) - person user3967257; 21.06.2015
comment
@user3967257 user3967257, используйте рецепт потребления, если вы хотите начать с определенной строки, второй потребляемый аргумент — это количество потребляемых строк, а затем просто for line in f..., чтобы прочитать остальные строки. - person Padraic Cunningham; 21.06.2015
comment
это то, что я имею в виду для i в диапазоне (X, предел): потреблять (f, i) - person user3967257; 21.06.2015

В качестве альтернативы вы можете использовать аргумент nrows и skiprows в пандах.

line_number = 30
pd.read_csv('big.csv.gz', sep = "\t", nrows = 1, skiprows = line_number - 1)

помните, что skiprows может быть списком, поэтому, если вам нужен заголовок, используйте

pd.read_csv('big.csv.gz', sep = "\t", nrows = 1, skiprows = list(range(1, line_number - 1)))
person user702846    schedule 17.12.2020