watchdog(python) - 仅监视一种文件格式并忽略“PatternMatchingEventHandler”中的所有其他内容

2024-01-21

我正在运行代码本文 https://www.thepythoncorner.com/2019/01/how-to-create-a-watchdog-in-python-to-look-for-filesystem-changes/并进行了一些更改以监视仅一种格式的文件创建/添加,即.csv在指定目录中。

现在的问题是:

每当添加的新文件不是 .csv 格式时,我的程序就会中断(停止监视,但继续运行);为了弥补这一点,这就是我所做的ignore_patterns参数(但添加其他格式的新文件后程序仍然停止监视):
PatternMatchingEventHandler(patterns="*.csv", ignore_patterns=["*~"], ignore_directories=True, case_sensitive=True)

完整的代码是:

import time
import csv
from datetime import datetime
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler
from os import path
from pandas import read_csv
# class that takes care of everything
class file_validator(PatternMatchingEventHandler):
    def __init__(self, source_path):
        # setting parameters for 'PatternMatchingEventHandler'
        super(file_validator, self).__init__(patterns="*.csv", ignore_patterns=["*~"], ignore_directories=True, case_sensitive=True)
        self.source_path = source_path
        self.print_info = None

    def on_created(self, event):
        # this is the new file that was created
        new_file = event.src_path
        # details of each new .csv file
        # demographic details
        file_name = path.basename(new_file)
        file_size = f"{path.getsize(new_file) / 1000} KiB"
        file_creation = f"{datetime.fromtimestamp(path.getmtime(new_file)).strftime('%Y-%m-%d %H:%M:%S')}"
        new_data = read_csv(new_file)
        # more details
        number_columns = new_data.shape[1]
        data_types_data = [
            ('float' if i == 'float64' else ('int' if i == 'int64' else ('character' if i == 'object' else i))) for i in
            [x.name for x in list(new_data.dtypes)]]
        null_count_data = list(dict(new_data.isna().sum()).values())
        print(f"{file_name}, {file_size}, {file_creation}, {number_columns}")
        # trying to access this info, but of no help
        self.print_info = f"{file_name}, {file_size}, {file_creation}, {number_columns}"

    def return_logs(self):
        return self.print_info

# main function    
if __name__ == "__main__":
    some_path = "C:\\Users\\neevaN_Reddy\\Documents\\learning dash\\"
    my_validator = file_validator(source_path=some_path)
    my_observer = Observer()
    my_observer.schedule(my_validator, some_path, recursive=True)
    my_observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        my_observer.stop()
        my_observer.join()
    # # this doesn't print anything
    print(my_validator.return_logs)

编辑1(在昆汀·普拉德评论之后):根据您在评论中的建议,我将我的论点更改为:

super(file_validator, self).__init__(patterns="*.csv",
                                     # ignore_patterns=["*~"],
                                     ignore_directories=True, 
                                     case_sensitive=True)

当我复制其他格式的文件时(我尝试过.ipynb文件),这个错误就是我所看到的(程序甚至停止监视.csv此后的文件):

Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Users\neevaN_Reddy\AppData\Local\Programs\Python\Python37\lib\threading.py", line 926, in _bootstrap_inner
    self.run()
  File "C:\Users\neevaN_Reddy\AppData\Local\Programs\Python\Python37\lib\site-packages\watchdog\observers\api.py", line 199, in run
    self.dispatch_events(self.event_queue, self.timeout)
  File "C:\Users\neevaN_Reddy\AppData\Local\Programs\Python\Python37\lib\site-packages\watchdog\observers\api.py", line 368, in dispatch_events
    handler.dispatch(event)
  File "C:\Users\neevaN_Reddy\AppData\Local\Programs\Python\Python37\lib\site-packages\watchdog\events.py", line 454, in dispatch
    _method_map[event_type](event)
  File "C:/Users/neevaN_Reddy/Documents/Work/Project-Aretaeus/diabetes_risk project/file validation using a class.py", line 26, in on_created
    new_data = read_csv(new_file)
  File "C:\Users\neevaN_Reddy\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\io\parsers.py", line 685, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "C:\Users\neevaN_Reddy\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\io\parsers.py", line 463, in _read
    data = parser.read(nrows)
  File "C:\Users\neevaN_Reddy\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\io\parsers.py", line 1154, in read
    ret = self._engine.read(nrows)
  File "C:\Users\neevaN_Reddy\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\io\parsers.py", line 2059, in read
    data = self._reader.read(nrows)
  File "pandas/_libs/parsers.pyx", line 881, in pandas._libs.parsers.TextReader.read
  File "pandas/_libs/parsers.pyx", line 896, in pandas._libs.parsers.TextReader._read_low_memory
  File "pandas/_libs/parsers.pyx", line 950, in pandas._libs.parsers.TextReader._read_rows
  File "pandas/_libs/parsers.pyx", line 937, in pandas._libs.parsers.TextReader._tokenize_rows
  File "pandas/_libs/parsers.pyx", line 2132, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Expected 1 fields in line 4, saw 2

显然,有一些错误pandas,这意味着我的on_created正在针对不支持的文件格式触发函数.csv也是,我认为这意味着必须有一些东西进去ignore_patterns论点不具备on_created添加其他格式的文件时触发该函数。


你可以尝试发送吗patterns作为列表而不是字符串,例如。patterns=["*.csv"]?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

watchdog(python) - 仅监视一种文件格式并忽略“PatternMatchingEventHandler”中的所有其他内容 的相关文章

  • 为什么我不能使用“exclude”从 python 轮子中排除“tests”目录?

    考虑以下包结构 与以下setup py内容 from setuptools import setup find packages setup name dfl client packages find packages exclude te
  • Python Nose 导入错误

    我似乎无法理解鼻子测试框架 https nose readthedocs org en latest 识别文件结构中测试脚本下方的模块 我已经设置了演示该问题的最简单的示例 下面我会解释一下 这是包文件结构 init py foo py t
  • Spark MLlib - 训练隐式警告

    我在使用时不断看到这些警告trainImplicit WARN TaskSetManager Stage 246 contains a task of very large size 208 KB The maximum recommend
  • 编辑 scikit-learn 决策树

    我想编辑 sklearn DecisionTree 例如改变条件或切割节点 叶子等 但似乎没有功能可以做到这一点 如果我可以导出到文件 编辑它以导入 如何编辑决策树 环境 Windows 10 python3 3 sklearn 0 17
  • Python 在 chroot 中运行时出现错误

    我尝试在 chroot 中运行一些 Python 程序 但出现以下错误 Could not find platform independent libraries
  • Python + PostgreSQL + 奇怪的ascii = UTF8编码错误

    我有包含字符的 ascii 字符串 x80 代表欧元符号 gt gt gt print x80 当将包含该字符的字符串数据插入数据库时 我得到 psycopg2 DataError invalid byte sequence for enc
  • 为什么导入 pdb 时出现此错误? “模块”对象没有属性“ascii_letters”

    尝试调试我的代码 我正在导入库pdb import sys from subprocess import check call import pdb functions if name main Code 我收到此错误 File reg p
  • 如何在 ReportLab 段落中插入回车符?

    有没有办法在 ReportLab 的段落中插入回车符 我试图将 n 连接到我的段落字符串 但这不起作用 Title Paragraph Title n Page myStyle 我想要这样做 因为我将名称放入单元格中 并且想要控制单元格中的
  • 在Python中创建一个新表

    我正在尝试从数控机床中提取数据 事件每毫秒发生一次 我需要过滤掉一些用管道 分隔的变量分隔符 PuTTy exe 程序生成的日志文件 我尝试阅读熊猫 但列不在同一位置 df pd read table data log sep 日志文件的一
  • 如何使用循环将十进制转换为二进制?

    我想编写一个程序 将十进制数 0 到 9 转换为二进制数 我可以编写如何使用重复除法将十进制数转换为二进制数的代码 但是 我在创建一个以二进制格式打印十进制数字 0 到 9 的循环时遇到了麻烦 这是我的代码 number 0 remaind
  • 为 Networkx 图添加标题?

    我希望我的代码创建一个带有标题的图 使用下面的代码 可以创建绘图 但没有标题 有人可以告诉我我做错了什么吗 import pandas as pd import networkx as nx from networkx algorithms
  • smooth_idf 是多余的吗?

    The scikit learn 文档 http scikit learn org stable modules generated sklearn feature extraction text TfidfTransformer html
  • Django 接受 AM/PM 作为表单输入

    我试图弄清楚如何使用 DateTime 字段在 Django 中接受 am pm 作为时间格式 但我遇到了一些麻烦 我尝试在 forms py 文件中这样设置 pickup date time from DateTimeField inpu
  • 如何向 SCons 构建添加预处理和后处理操作?

    我正在尝试在使用 SCons 构建项目时添加预处理和后处理操作 SConstruct 和 SConscript 文件位于项目的顶部 预处理动作 生成代码 通过调用不同的工具 gt 不知道在此预处理之后将生成的确切文件 可以创建用于决定生成哪
  • Jupyter Notebook:没有名为 pandas 的模块

    我搜索了其他问题 但没有找到任何有帮助的内容 大多数只是建议您使用 conda 或 pip 安装 pandas 在我的 jupyter 笔记本中 我试图导入 pandas import pandas as pd 但我收到以下错误 Modul
  • 最小硬币找零问题——回溯

    我正在尝试用最少数量的硬币解决硬币找零问题 采用回溯法 我实际上已经完成了它 但我想添加一些选项 按其单位打印硬币数量 而不仅仅是总数 这是我下面的Python代码 def minimum coins coin list change mi
  • Python 枚举子集迭代

    我想迭代以下枚举的子集 class Items enum Enum item1 0 item2 1 item3 2 item4 3 item5 4 item6 5 item7 6 item8 7 说我想 for item in Items
  • 在Python 3.2中,我可以使用http.client打开并读取HTTPS网页,但urllib.request无法打开同一页面

    我想打开并阅读https yande re https yande re with urllib request 但我收到 SSL 错误 我可以使用以下方式打开并阅读页面http client用这个代码 import http client
  • 为什么用字符串和时间增量转置 DataFrame 会转换数据类型?

    这种行为对我来说似乎很奇怪 id列 字符串 在转置后转换为时间戳df如果另一列是时间增量 import pandas as pd df pd DataFrame id 00115 01222 32333 val 12 14 170 df v
  • 从 pandas 数据框中绘制堆积条形图

    我有数据框 payout df head 10 复制以下 Excel 绘图的最简单 最智能和最快的方法是什么 我尝试过不同的方法 但无法让一切都到位 Thanks 如果您只想要一个堆积条形图 那么一种方法是使用循环来绘制数据框中的每一列 并

随机推荐

  • Files#delete(Path) 和 File#delete() 之间的区别

    我正在使用带有 java 7 update 6 的 Windows 7 并发现这种奇怪的 至少对我来说 行为 我有两个文件E delete1 txt and E delete2 txt两者都是只读文件 当我尝试删除如下文件时 它会被删除而没
  • 从年月(yyyy-MM)到年月(yyyy-MMMM)[重复]

    这个问题在这里已经有答案了 我有一个变量 YearMonth date 里面站立的地方 2016 07 例如 我希望它仍然是 YearMonth 但是 2016 july 注意 没有 分隔符 或者更好的是 2016 luglio 即意大利语
  • 我可以使用 firebase 作为 flutter 桌面应用程序的后端吗?如果是这样怎么办?

    我正在使用 flutter 构建一个桌面应用程序 我可以使用 firebase 作为后端吗 如果是这样怎么办 如果您查看 Firebase 文档可用的插件 https firebase google com docs flutter set
  • 将支持 bean 作为参数传递给 Facelet include

    我有一个可以在不同应用程序中使用的 Facelet 我不是要复制它 而是重复使用它 我需要传递将管理视图的支持 bean 作为参数 因为某些逻辑可能会根据使用它的应用程序而有所不同 我不想使用复合组件 而只是包含 Facelet 并指定哪个
  • Dojo,如何在 DIV 上执行 onclick 事件

    互联网上有一个淡出示例 http docs dojocampus org dojo fadeOut t tundra http docs dojocampus org dojo fadeOut t tundra 但我想做一些不同的事情 我希
  • 返回 PHP 多维数组中最后一个数组的元素

    如何在 PHP 中动态显示最后一个数组中的元素 例如 Array 0 gt Array id gt 6 user id gt 8 category path gt Sport 1 gt Array id gt 8 user id gt 8
  • syscall_thread_switch iOS 8.3 竞赛 - CocoaLumberjack bug?如何调试这个?

    我在我的应用程序中遇到了竞争条件 每当我暂停调试时 所有或除 1 个线程之外的所有线程都会卡在 syscall thread switch 上 它在模拟器上重现得更频繁 在 iPad Air 上也是如此 CocoaLumberjack 的
  • 从 Hibernate 4.3.6 迁移到 Hibernate 5

    我有一个旧项目 我使用 Java API 中的 Date 我想将其更改为新的 Java 8 Date APILocalDateTime 我读到 Hibernate 5 之前的版本不支持新的 Java 8 Date API 我决定从 Hibe
  • 原生 Vim 随机数脚本

    我知道有多种方法可以获取随机数 例如从 shell 中 然而 我在 Android 手机上运行 vim 几乎没有编译 而且 它不必是严格随机的 关键是 在 Vim 中获取一系列相当好的随机数的有趣 简洁 快速 即使用 vim 原生函数 或简
  • MS Access 2010 运行时 - 连续形式中缺少鼠标右键单击上下文菜单

    我在 MS Access 2003 中编写了一个应用程序 我可以使用 Access 2010 运行该应用程序 但是当我仅使用 MS Access 2010 运行时打开同一个 2003 应用程序时 我无法再以连续形式使用鼠标右键单击 因为我可
  • 向下转型最佳实践 (C++)

    静态代码分析工具往往会大量谈论 将基类向下转换为派生类 我还发现了一些编码标准指南 其中提到不要这样做 所以我想知道什么是最佳实践方法 这是我的用例 我有一个 Base 接口 DerivedA DerivedB 类 然后是一个包含 Base
  • 如何在codeigniter中使用pdo?

    据我所知 PDO 支持最近已添加到 codeigniter 但我找不到任何有关如何实际使用它的文档或教程 谁能告诉我如何使用它 您可以编辑 application config database php并启用 PDO 驱动程序 db def
  • Java中Float的最大值?

    下列question https stackoverflow com questions 3884793 minimum values and double min value in java表示 Double 的最小值是 Double M
  • QEMU和KVM在虚拟机I/O中扮演什么角色?

    我发现 QEMU 和 KVM 之间的界限非常模糊 我发现有人说虚拟机是qemu进程 而另一些人说是kvm进程 究竟是什么 而QEMU和KVM在虚拟机I O中扮演什么角色呢 比如一个vm做PIO MMIO的时候 是qemu还是kvm会把它困住
  • matplotlib:同一张图上有2个不同的图例

    我有一个图 其中不同的颜色用于不同的参数 不同的线条样式用于不同的算法 目的是比较使用相似参数执行的不同算法的结果 这意味着我总共使用了 4 种不同的颜色和 3 种不同的线条样式 在同一张图表上总共使用了 12 个图 我实际上是根据颜色构建
  • 带有 CSS 波浪的动画文本

    怎么运行的 The png下面显示的图像被剪辑到带有动画的文本中 行动中 body background 000000 Wave Loader text transform uppercase font family Cabin Conde
  • 如何通过 SSH 协议克隆 Github Gist?

    Github 似乎确实希望我们使用 HTTPS 协议来使用 Gists 例如 他们只在 Gist 页面上列出 HTTPS url 例如https gist github com donatello 5834862 https gist gi
  • 从 Microsoft SQL 查询到 Pandas Dataframe

    我正在尝试用 Python3 编写一个程序 它将在 Microsoft SQL 中的表上运行查询并将结果放入 Pandas DataFrame 中 我的第一次尝试是下面的代码 但由于某种原因 我不明白这些列没有按照我在查询中运行它们的顺序出
  • iOS 上的 HTML5 MSE

    我正在尝试使用 Chrome Mobile 让 hls js 在 iOS 上工作 但我注意到 Chrome Mobile 不支持 MediaSourceExtensions 这绝对是必要的 iOS 是否支持 MSE Chrome 移动版 F
  • watchdog(python) - 仅监视一种文件格式并忽略“PatternMatchingEventHandler”中的所有其他内容

    我正在运行代码本文 https www thepythoncorner com 2019 01 how to create a watchdog in python to look for filesystem changes 并进行了一些