Я читал супер большой файл csv (10G), используя pandas, и read_csv (filename, chunksize = chunksize) возвращает мне итератор (предположим, что он называет «читатель»). И теперь я хочу получить точный фрагмент, потому что мне просто нужно несколько строк (например, файл csv, который я читаю, имеет 1000000000 строк, и я хочу получить номер 50000000 строк и 1000 строк после него), что мне делать кроме перебора итератора, пока он не достигнет куска, который я хочу?Как получить точный итератор python?
Вот мой бывший код:
def get_lines_by_chunk(file_name, line_beg, line_end, chunk_size=-1):
func_name = 'get_lines_by_chunk'
line_no = get_file_line_no(file_name)
if chunk_size < 0:
chunk_size = get_chunk_size(line_no, line_beg, line_end)
reader = pd.read_csv(file_name, chunksize=chunk_size)
data = pd.DataFrame({})
flag = 0
for chunk in reader:
line_before = flag * chunk_size
flag = flag + 1
line_after = flag * chunk_size
if line_beg >= line_before and line_beg <= line_after:
if line_end >= line_after:
temp = chunk[line_beg - line_before : chunk_size]
data = pd.concat([data, temp], ignore_index=True)
else:
temp = chunk[line_beg - line_before : line_end - line_before]
data = pd.concat([data, temp], ignore_index=True)
return data
elif line_end <= line_after and line_end >= line_before:
temp = chunk[0 : line_end - line_before]
data = pd.concat([data, temp], ignore_index=True)
return data
elif line_beg < line_before and line_end > line_after:
temp = chunk[0 : chunk_size]
data = pd.concat([data, temp], ignore_index=True)
return data
не может просто сделать 'ДФ = pd.read_csv (имя_файла, SkipRows = 50000000, Nrows = 1000)'? – EdChum
oh ... кажется, работает, я новичок в pandas .. – flyingrose
Название * «Как получить точный номер итератора python?» «Не имеет для меня никакого смысла. Можете ли вы изменить его? – smci