【问题标题】:How can I check if a new line has been added to a file in Python?如何检查是否已将新行添加到 Python 中的文件中?
【发布时间】:2015-11-18 09:18:08
【问题描述】:

我希望在网络上的 .txt 文件发生更改时收到通知,例如在日志文件中,例如 http://overrustlelogs.net/Cowsep%20chatlog/November%202015/2015-11-18.txt

我正在使用 urllib2 检索数据,并使用 prowlpy 发送我的电话通知,但我不确定如何检查文本文件是否已更改。 (我想在有新行时收到通知,甚至在提到我的名字时也能收到通知)

编辑:我不认为获取它的 MD5 哈希是一个很好的方法,我只是想在文本文件中收到新行的通知。我可能会让它每 10 秒循环一次,并向我发送自上一个文本文件以来的更改通知

【问题讨论】:

  • 你得到文件内容的哈希总和,你把之前已知的哈希值存储在某处(数据库、文本文件、pickle对象文件)。
  • 为什么您认为使用哈希不是一个好的解决方案?与前一个版本相比,每个新版本都会获得不同的哈希值。
  • 正如其他人所建议的,请务必使用哈希来检查是否有任何更改。当且仅当有一些更改时,您才能检查文件的内容以发送特定通知。如果通知是通用的,则无需检查文件。
  • @djanssens 没错,但我希望将文本文件中的新行发送到我的手机

标签: python


【解决方案1】:

您可以使用filecmp或difflib来比较文件,并可以产生各种格式的差异信息。下面是一个 diff 的简短示例:

s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'):
    sys.stdout.write(line)

输出:

*** before.py
--- after.py
***************
*** 1,4 ****
! bacon
! eggs
! ham
  guido
--- 1,4 ----
! python
! eggy
! hamster
  guido

我建议您不要为此任务每 10 秒循环一次。您可以使用celery 进行每 10 秒左右的任务调度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    相关资源
    最近更新 更多