Найти - Пользователи
Полная версия: Помогите новичку
Начало » Python для новичков » Помогите новичку
1
y_starynets
Есть текстовый файл
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)

Вот что придумал но считывает весь файл, думал считывать количество строк которые прочита и следующий раз начинать с этой строки но не знаю как это сделать.
Зарание спасибо
marvellik
 from itertools import islice
n = 3 #номер строки с которой читать
with open('test.txt') as f:
    for line in islice(f, n, None):
        print(line)

Rodegast
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'
y_starynets
Rodegast
marvellik Ты так всё равно весь файл перебирать будешь. Вот как надо:
Так как вы рекомендуете это в ручную, а мне нужно будет чтобы она автоматом работала. Я потом буду его запускать через крон
y_starynets
marvellik
file.tell()
Мне нужно что бы она в автомате работала я не могу постоянно ставить номер с которого начинать
Rodegast
> Так как вы рекомендуете это в ручную, а мне нужно будет чтобы она автоматом работала

Я тебе просто показал как позицию в файле получать и потом её установить и не более того.
y_starynets
Rodegast
b = fileinput.lineno( )
Спасибо конечно но как мне это должно помочь ? И я использую lineno чтобы узнать номер последней строки
marvellik
y_starynets
Мне нужно что бы она в автомате работала я не могу постоянно ставить номер с которого начинать
вам показали примеры. что вам мешает после каждого чтения файла запоминать последнюю позицию и с нее начинать читать при следующем запуске?
Rafik

y_starynets
Мне нужно что бы она в автомате работала я не могу постоянно ставить номер с которого начинать
y_starynets, тебе Rodegast показал подходящие для решения твоей задачи функции работы с файлом: readline, tell, seek. Используй в цикле readline для чтения строки, tell для запоминания позиции после чтения строки. Как файл закончится, сохрани последнюю позицию после чтения. Сохранить можно куда хочешь: хошь в БД, хошь в какой-либо файлик или ещё куда-нибудь. При запуске через крон, скрипт пусть вытащит это значение и сделает seek на него. Это делаем после открытия файла с данными.
Кажись, разжувал. Открывай рот и глотай.
doza_and
y_starynets
Как мне сделать чтобы не считывать одни и те же строки.
Переименовать файл, затем считать, затем стереть переименованный файл.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB