У меня есть файл, который постоянно обновляется и в него добавляются строки. Как можно получать только те строки, которые добавились?
UPD: Одновременно может добавиться 2-е или более строки.
У меня есть файл, который постоянно обновляется и в него добавляются строки. Как можно получать только те строки, которые добавились?
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
)