Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 12, 2019 10:26:25

y_starynets
Зарегистрирован: 2019-04-11
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите новичку

Есть текстовый файл
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)

Вот что придумал но считывает весь файл, думал считывать количество строк которые прочита и следующий раз начинать с этой строки но не знаю как это сделать.
Зарание спасибо

Офлайн

#2 Апрель 12, 2019 11:09:00

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Помогите новичку

 from itertools import islice
n = 3 #номер строки с которой читать
with open('test.txt') as f:
    for line in islice(f, n, None):
        print(line)

Офлайн

#3 Апрель 12, 2019 11:39:17

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Помогите новичку

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'



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Апрель 12, 2019 14:15:37

y_starynets
Зарегистрирован: 2019-04-11
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите новичку

Rodegast
marvellik Ты так всё равно весь файл перебирать будешь. Вот как надо:
Так как вы рекомендуете это в ручную, а мне нужно будет чтобы она автоматом работала. Я потом буду его запускать через крон

Офлайн

#5 Апрель 12, 2019 14:20:54

y_starynets
Зарегистрирован: 2019-04-11
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите новичку

marvellik
file.tell()
Мне нужно что бы она в автомате работала я не могу постоянно ставить номер с которого начинать

Офлайн

#6 Апрель 12, 2019 14:40:20

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Помогите новичку

> Так как вы рекомендуете это в ручную, а мне нужно будет чтобы она автоматом работала

Я тебе просто показал как позицию в файле получать и потом её установить и не более того.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Апрель 12, 2019 14:50:18

y_starynets
Зарегистрирован: 2019-04-11
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите новичку

Rodegast
b = fileinput.lineno( )
Спасибо конечно но как мне это должно помочь ? И я использую lineno чтобы узнать номер последней строки

Отредактировано y_starynets (Апрель 12, 2019 14:51:35)

Офлайн

#8 Апрель 12, 2019 17:13:37

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Помогите новичку

y_starynets
Мне нужно что бы она в автомате работала я не могу постоянно ставить номер с которого начинать
вам показали примеры. что вам мешает после каждого чтения файла запоминать последнюю позицию и с нее начинать читать при следующем запуске?

Офлайн

#9 Апрель 12, 2019 21:42:57

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Помогите новичку


y_starynets
Мне нужно что бы она в автомате работала я не могу постоянно ставить номер с которого начинать
y_starynets, тебе Rodegast показал подходящие для решения твоей задачи функции работы с файлом: readline, tell, seek. Используй в цикле readline для чтения строки, tell для запоминания позиции после чтения строки. Как файл закончится, сохрани последнюю позицию после чтения. Сохранить можно куда хочешь: хошь в БД, хошь в какой-либо файлик или ещё куда-нибудь. При запуске через крон, скрипт пусть вытащит это значение и сделает seek на него. Это делаем после открытия файла с данными.
Кажись, разжувал. Открывай рот и глотай.

Офлайн

#10 Апрель 12, 2019 23:02:05

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Помогите новичку

y_starynets
Как мне сделать чтобы не считывать одни и те же строки.
Переименовать файл, затем считать, затем стереть переименованный файл.



Отредактировано doza_and (Апрель 12, 2019 23:03:32)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version