2015-06-21 1 views
4

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

+0

возможно дубликат [Начать чтение и запись на определенной строке в формате CSV с Python] (http://stackoverflow.com/questions/11618207/start-reading-and-writing-on-specific-line-on-csv-with-python) – GhitaB

ответ

6

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

linecache.getline (имя файла, LINENO [, module_globals])

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

import linecache 


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

Или использовать consume recipe от 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) 
+0

Я не знал, что 'open' возвратил итерабель ... – xtofl

+0

@xtofl, файловый объект это его собственный итератор, когда вы 'для строки в f: ...', затем повторно назовите –

+1

и начните чтение с а не с самого начала? он работает только с потреблением (f, X) и увеличивает X каждый раз (инициализируйте X в нужном месте), спасибо за полезный ответ :) – user3967257