2010-07-09 3 views

ответ

4

Вам просто нужно проанализировать весь файл CSV, а затем использовать стандартную индексацию последовательности.

В противном случае, вы можете сделать что-то вроде этого

def my_filter(csv_file, lines): 
    for line_number, line in enumerate(csv_file): 
     if line_number in lines: 
      yield line 

my_file = open("file.csv") 
my_reader = csv.reader(my_filter(my_file, (3,))) 

Обратите внимание, что вы не можете избежать разбора всего файла, таким образом, или в другом, потому что линии имеют переменные длины. Счет строки только продвигается, когда найден «\ n», и его нужно найти в символе по символу.

Кроме того, этот фильтр не будет работать, если у вас есть символы новой строки внутри кавычек в файле csv - возможно, вам просто лучше разобрать весь файл в списке и получить от него индексы:

my_file = open("file.csv") 
my_reader = csv.reader(my_file) 
my_line = list(my_reader)[3] 

обновление Самое главное: если вам нужен произвольный доступ к информации, которая является слишком большой, чтобы поместиться в памяти, просто рассмотреть сброс его в базу данных SQL вместо. Это избавит вас от необходимости изобретать много колес.

+0

наверняка. файл слишком велик, чтобы сразу считывать все это в память. я планирую получить доступ ко всем линиям, но также должен прыгать по файлу и должен избегать загрузки всего этого сразу. – ahhh

+0

SO, решение фильтра поможет вам - (поскольку у вас нет \ in внутри буквенных значений). Мне нужен не доступ к порядку, решение фильтра можно использовать для создания списка, как в последнем примере. – jsbueno

Смежные вопросы