Python 寻求读取不断增长的文件

2024-04-25

我编写了一个 python 脚本,使用任务计划程序每 5 分钟运行一次,读取不断增长的日志文件(文本文件)并将数据插入数据库。每天生成新的日志文件。

我需要修改它并在最后一行的末尾放置一个指针,因此当调度程序再次运行时,它会在最后插入的行之后开始。新的一天开始后,指针返回到新文件的第一行。 Seek 函数可以做到这一点,但还不知道如何实现。这是我的尝试:

import time, os
day=time.strftime("%Y%m%d")
month=time.strftime("%m")
filename=time.strftime("%Y%m%d")

# Check for a new day
currTime = datetime.datetime.now()
lastDay = 0


#Open file in a relative location
logs_dir = os.path.dirname(r'C:\Python27\Logs\\') 
rel_path = os.path.join('\\', month, filename + '.log')
abs_file_path = os.path.join(logs_dir, month, filename) + '.log'
file = open(abs_file_path, 'r')


if currTime.day != lastDay:
  lastDay = currTime.day
  file.seek(first_byte_to_read) #<<-- to reset the pointer ??
else:
  file.seek(last_read_byte) 

您无需重复运行该程序并记住上次停止的位置,只需运行该程序一次并让它监视文件中的新内容即可。有两种主要方法可以做到这一点:

  1. 轮询。读取直到文件结尾,然后等待几秒钟并重试。简单、可靠,但对于功率受限的设备来说不是一个好主意。
  2. 异步。在 Linux 上你可以使用pyInotify http://pyinotify.sourceforge.net/当文件中有新内容时被唤醒。不过,您似乎使用的是 Windows,请参阅此处:如何查看文件的更改? https://stackoverflow.com/questions/182197/how-do-i-watch-a-file-for-changes-using-python有点复杂,但通常是更好的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 寻求读取不断增长的文件 的相关文章

随机推荐

  • iPhone 应用程序和 PayPal

    我想将 PayPal 支付功能集成到我的本机 iPhone 应用程序中 而不使用 Web 界面 这样用户就不必离开当前应用程序 怎么可能 我应该使用 SOAP XML 请求 响应机制吗 我通过以下链接来的http www slideshar
  • 如何在keycloak登录页面实现Recaptcha

    我想在 keycloak 登录页面 如注册页面 中实现 recaptcha 我用所需的工厂类扩展了 UsernamePasswordForm 类 我什至还开设了行动要求课程 但我仍然看不到在提供程序选项卡中添加登录 我也修改了现有的logi
  • 如何禁用 C++ 宏中的警告

    在 Visual C 中 您可以使用 pragma 暂时禁用警告 pragma warning suppress 4307 如何禁用宏内的警告 例如 当我导致如下所示的 积分常量溢出 警告时 define TIMES A MILLION x
  • android 旋转器的屏幕方向处理

    我有一个活动 其中有一个旋转器 因为对于纵向和横向模式我有不同的布局所以我正在改变布局onConfigurationChanged method Override public void onConfigurationChanged Con
  • 多个资源的 REST 接口使用

    我目前正在通过 http 添加 REST API 到在线服务 我遇到了一个非常简单的问题 我找不到令我满意的答案 我主要有 2 个资源 用户 和 报告 正如您所猜测的那样 报告与用户相关联 与一个且仅一个 我的数据库中的外键 不管怎样 我有
  • Elastic Search 5.x 嵌套多个查询 C#

    我将 C 与这些 nuget 包一起使用
  • 有没有办法匹配规范中 Mockito 模拟对象的按名称调用参数?

    我正在使用一些方法测试一个对象和另一个对象之间的交互呼唤名字论据 但是 我不知道如何为该按名称调用参数创建参数匹配器 假设这是模拟对象的签名 def fn arg1 gt String arg2 Int Any 然后我真正想做的是测试是否使
  • 调整某一特定一侧的边框

    我正在使用 ListBox 的 controlTemplate 来显示集合 我想显示带有边框的所有项目 就像在网格中一样 所有行的大小相同 当我给每个 listBoxItem 一个边框时 两个项目之间的线具有双倍大小 由第一个项目的底部边框
  • 更改变量值 scss

    我在我的 scss 文件中定义了不同的变量 我在一些 scss 文件中使用了这些变量 变量 scss light theme rgba 94 161 215 0 3 dark theme 5EA1D7 darker theme 57647A
  • C# 管理窗口事件

    我想使用 C 从 Windows 事件日志中删除事件 谁能指出我如何实现这一目标的正确方向 Easy 但删除看起来像从数组中删除项目 您需要复制所有数组 但需要删除的项目除外 有一个示例 如何 从日志中删除项目具有非偶数索引的每个项目 us
  • 动画添加类/删除类?

    活生生的例子在这里 http timkjaerlange com foobar stack stuff august 18 2010 test html http timkjaerlange com foobar stack stuff a
  • 引用的项目在编译时“丢失”

    我有一个包含两个项目的 C 解决方案 一个服务 主项目 和一个记录器 该服务使用记录器中的类 我在服务项目中添加了对记录器项目的引用 在设计时 自动完成工作正常 记录器的类是可见的 我使用的引用具有适当的颜色 我重建解决方案 但出现问题 不
  • Firebase 错误地显示已删除的数据/Swift 3/Xcode 8.2

    我是编码新手 刚刚开始使用 Firebase 我正在运行以下函数 该函数基本上是尝试创建 2 个节点 锦标赛 和 每日游戏 如果它们尚不存在 数据库树应该如下所示 London City Game Date stringDate getti
  • PHP 正则表达式 [仅接受选定的字符]

    我想接受用户输入的字符列表并拒绝其余的 我可以接受格式化字 符串或查找是否缺少字符 字符串 但我如何才能只接受一组字符而拒绝所有其他字符 我想使用 preg match 来做到这一点 例如允许的字符有 a z A Z 用户必须能够以任何顺序
  • 使用 Google 的 Gson 进行严格的 JSON 解析?

    假设我正在使用 Google 的 Gson 库将 JSON 解析为 Java 数据结构 如果 Java 字段没有对应的 JSON 是否有简单的方法抛出异常 也就是说 我希望要求 JSON 具有 Java 结构中的所有字段 Gson 没有 J
  • JSLint 错误:将调用移至包含该函数的括号中

    我怎样才能让这个代码 jsLint 快乐 function window document undefined some code jQuery window document 它建议我这样写 会有什么不同吗 我该怎么办 function
  • 如何在 WPF 中的窗口上绘图(最佳实践)?

    我正在尝试编写一个类似交互式游戏的小型应用程序 我需要有一个Draw方法将在屏幕上绘制 但无法弄清楚如何构造 WPF 的方法 如果这是Winforms 我可以使用 public void Draw Graphics g 但对于一个WPF W
  • 我的 java 应用程序不读取我的文件(maven 项目)

    我有一个 Java 简单项目中的应用程序 但是 我需要将此项目粘贴到 Maven 项目中 因此 我基本上制作了一个简单的 Maven 项目 并将所有类复制并粘贴到其中 我需要在服务器中运行一个war 并且我需要像Java应用程序一样运行Ma
  • 从头开始创建 mp3 文件 C#

    作为一些实验的一部分 我想到了一些事情 如何在 C 中从头开始创建一个 mp3 文件 这实际上听起来像什么 例如 创建一个播放音符的 mp3 文件 C 或 B 降调 我怎样才能实现这一点 它必须是 mp3 文件 而不是 wav 或其他任何文
  • Python 寻求读取不断增长的文件

    我编写了一个 python 脚本 使用任务计划程序每 5 分钟运行一次 读取不断增长的日志文件 文本文件 并将数据插入数据库 每天生成新的日志文件 我需要修改它并在最后一行的末尾放置一个指针 因此当调度程序再次运行时 它会在最后插入的行之后