Хорошо, у меня есть большой (8 ГБ +) текстовый файл, содержащий устаревшие данные, скорее всего, из мейнфрейма b / c это все фиксированные поля, которые должны анализироваться построчно и символ за символом. Строковое чтение файла прекрасно работает на небольшом образце, но не превышает нескольких сотен МБ.
По сути, я хочу читать текстовый файл в пакетном режиме, скажем, пять миллионов строк в пакете, и затем обрабатывайте каждую партию построчно.
Это то, что я написал в Python, но по какой-то причине приведенный ниже код заканчивается бесконечным l oop при тестировании на файле меньшего размера. Я немного сбит с толку, что перерыв на самом деле никогда не срабатывает и снимок постоянно перезаписывается. Есть идеи, как это исправить?
# Python 3.x
def convert_txt_to_csv(path_to_txt, path_to_save_csv, column_names):
df = pd.DataFrame(columns=column_names)
chunksize = 5000 # 5000000 - 5 million batches for the big file
print("Add rows...")
with open(path_to_txt, 'r', encoding="ISO-8859-1") as file:
lines = True
cnt = 0
mil = 1
while lines:
lines = file.readlines(chunksize) # This guy should become False if there no more lines...
if not lines:
break # Double safety, if they're no more lines, escape the loop...
for line in lines:
process_line(line.replace('\n', ''), df, cnt)
cnt += 1
# save snapshot after each batch
df.to_csv(path_to_snapshot_csv)
print("Saved Snapshot: ", mil)
mil +=1
print("Process")
df = process(df)
print("Safe")
df.to_csv(path_to_save_csv)
print("Nr. of data: ", len(df.index))