HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 13.02.2022, 07:15
Neon3333
Участник форума
Регистрация: 13.02.2019
Сообщений: 183
С нами: 3815624

Репутация: 83
По умолчанию

Цитата:
Сообщение от GovnocodeLua  

У меня есть файл, который постоянно обновляется и в него добавляются строки. Как можно получать только те строки, которые добавились?
UPD: Одновременно может добавиться 2-е или более строки.
Хранить предыдущее состояние файла и сравнивать
 
Ответить с цитированием

  #2  
Старый 14.02.2022, 01:43
NoN4m3
Познающий
Регистрация: 21.03.2020
Сообщений: 78
С нами: 3235556

Репутация: 13
По умолчанию

Цитата:
Сообщение от GovnocodeLua  

У меня есть файл, который постоянно обновляется и в него добавляются строки. Как можно получать только те строки, которые добавились?
UPD: Одновременно может добавиться 2-е или более строки.
При запуске программы считать файл, и выписать его в переменную а также его хеш, после чего запустить цикл ожидания обновления, что-бы не тратить много времени на проверку, хешируй файл который надо проверить и сравнивай хешы, если хеш файла изменился - с помощью функции .replace() сделай замену и выпиши в другую переменную. Надеюсь помог, ниже будет пример, если будут вопросы - обращайся в ДС, он в профиле.

Есть много вариантов решения, зависит от конкретной задачи, это один из простых, он не идеален в нём есть и свои недочёты, сделан был на быструю руку.

Код проверен, срабатывает моментально.


Python:





Код:
import
hashlib
from
time
import
sleep
def
getSHA256
(
filename
)
:
h
=
hashlib
.
sha256
(
)
b
=
bytearray
(
128
*
1024
)
mv
=
memoryview
(
b
)
with
open
(
filename
,
'rb'
,
buffering
=
0
)
as
f
:
for
n
in
iter
(
lambda
:
f
.
readinto
(
mv
)
,
0
)
:
h
.
update
(
mv
[
:
n
]
)
return
h
.
hexdigest
(
)
def
listToString
(
s
)
:
_s
=
""
for
ele
in
s
:
_s
+=
ele
return
_s
def
readFile
(
filename
)
:
with
open
(
filename
)
as
f
:
lines
=
f
.
readlines
(
)
return
listToString
(
lines
)
filename
=
"default.txt"
_sha256
=
getSHA256
(
filename
)
_text
=
readFile
(
filename
)
while
True
:
if
getSHA256
(
filename
)
!=
_sha256
:
# условие сработает если файл будет изменён
_new
=
readFile
(
filename
)
.
replace
(
_text
,
""
)
print
(
"New in file: "
+
_new
)
_sha256
=
getSHA256
(
filename
)
_text
=
readFile
(
filename
)
sleep
(
0.15
)
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.