Форум сайта python.su
0
Есть текстовый файл
00:00:00.311 445.011
00:00:01.311 965.649
00:00:02.311 461.963
00:00:03.311 492.741
Таких строк больше 10000, они записываются в файл в течении суток. Мне нужно их считывать и заносить в базу. Как мне сделать чтобы не считывать одни и те же строки.
import fileinput
with fileinput.input('20190329.txt') as f:
for line in f:
print(line)
b = fileinput.lineno( )
print(b)
Вот что придумал но считывает весь файл, думал считывать количество строк которые прочита и следующий раз начинать с этой строки но не знаю как это сделать.
Зарание спасибо
Офлайн
73
from itertools import islice n = 3 #номер строки с которой читать with open('test.txt') as f: for line in islice(f, n, None): print(line)
Офлайн
186
marvellik Ты так всё равно весь файл перебирать будешь. Вот как надо:
>>> file = open("/home/rodegast/lab.cl") >>> file.readline() '(defun change-byte (b)\n' >>> file.tell() # Получаем текущую позицию в файле 23 >>> file.readline() '\t(dotimes (i 4 b)\n' >>> file.tell() # После чтения следующей строки позиция изменилась, устанавливаем её на предыдущую. 41 >>> file.seek(23) >>> file.readline() '\t(dotimes (i 4 b)\n'
Офлайн
0
RodegastТак как вы рекомендуете это в ручную, а мне нужно будет чтобы она автоматом работала. Я потом буду его запускать через крон
marvellik Ты так всё равно весь файл перебирать будешь. Вот как надо:
Офлайн
0
marvellikМне нужно что бы она в автомате работала я не могу постоянно ставить номер с которого начинать
file.tell()
Офлайн
186
> Так как вы рекомендуете это в ручную, а мне нужно будет чтобы она автоматом работала
Я тебе просто показал как позицию в файле получать и потом её установить и не более того.
Офлайн
0
RodegastСпасибо конечно но как мне это должно помочь ? И я использую lineno чтобы узнать номер последней строки
b = fileinput.lineno( )
Отредактировано y_starynets (Апрель 12, 2019 14:51:35)
Офлайн
73
y_starynetsвам показали примеры. что вам мешает после каждого чтения файла запоминать последнюю позицию и с нее начинать читать при следующем запуске?
Мне нужно что бы она в автомате работала я не могу постоянно ставить номер с которого начинать
Офлайн
27
y_starynetsy_starynets, тебе Rodegast показал подходящие для решения твоей задачи функции работы с файлом: readline, tell, seek. Используй в цикле readline для чтения строки, tell для запоминания позиции после чтения строки. Как файл закончится, сохрани последнюю позицию после чтения. Сохранить можно куда хочешь: хошь в БД, хошь в какой-либо файлик или ещё куда-нибудь. При запуске через крон, скрипт пусть вытащит это значение и сделает seek на него. Это делаем после открытия файла с данными.
Мне нужно что бы она в автомате работала я не могу постоянно ставить номер с которого начинать
Офлайн
253
y_starynetsПереименовать файл, затем считать, затем стереть переименованный файл.
Как мне сделать чтобы не считывать одни и те же строки.
Отредактировано doza_and (Апрель 12, 2019 23:03:32)
Офлайн