- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行来自 this article 的代码并进行了一些更改以监视仅一种格式的文件创建/添加,即指定目录中的 .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(在 Quentin Pradet 发表评论之后):根据您在评论中的建议,我将我的论点更改为:
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
函数。
最佳答案
您可以尝试将pattern
作为列表而不是字符串发送,例如。 patterns=["*.csv"]
?
关于python - watchdog(python) - 仅监视一种文件格式并忽略 'PatternMatchingEventHandler' 中的其他所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59063532/
我安装了看门狗,但尝试运行任何代码都不起作用。我收到那个错误信息。这是代码片段。有想法该怎么解决这个吗? 最佳答案 嗯,这是使用 Python 包时一个非常古老和常见的问题。您将文件命名为 watch
前言 在平时的开发中随着我们系统应用不断地迭代变的复杂,对应用的实时监控变得越来越重要。实时监控不仅可以帮助我们快速定位问题,还能在出现问题时及时采取措施,减少业务中断的时间。 本文将介绍一个名为
在python中文件监控主要有两个库,一个是pyinotify ( https://github.com/seb-m/pyinotify/wiki),一个是watchdog(http://pytho
项目介绍 WatchDog是一个开源(MIT License)、免费、针对ASP.Net Core Web应用程序和API的实时应用监控系统。开发者可以实时记录和查看他们的应用程序中的消息、事件、H
我有一个简单的 Watchdog 和 Queue 进程来监视目录中的文件。 代码取自 https://camcairns.github.io/python/2017/09/06/python_watc
来自Watchdog Quickstart ,我可以看到所有事件,例如修改文件夹、删除文件、创建文件等。但是,我只想查看文件何时创建。我必须更改什么才能只看到创建的文件? import sys imp
我正在使用看门狗来监视目录(和子目录)中创建的文件。如果创建的文件是 .csv,程序将读取它们(并对文件进行一些小的更改,但这实际上不是问题的一部分)。问题是有时 readlines() 返回一个空列
在 Ubuntu 上运行,每次我创建一个文件时,我都会得到一个修改和创建的事件。 这是设计使然还是我做错了什么? 我正在使用事件处理程序类 PatternMatchingEventHandler ev
使用/dev/watchdog 似乎只对监视另一个进程有效,因为在编译内核时没有设置 CONFIG_WATCHDOG_NOWAYOUT 选项,监视/看门狗进程中的崩溃将导致操作系统清理并关闭文件。从而
系统启动过程图: framework层所有的service都是运行在systemserver进程中;systemserver进程是由zygote进程创建。 systemserver进程
我正在运行以下代码,该代码在 Python 中实现 WatchDog 来监视文件更改。我试图跟踪日志文件 (DoNotDelete.txt) 中的所有更改,因此我试图忽略代码中的此 DoNotDele
我无法使用设备/dev/watchdog,因为有东西正在使用它。 echo 1 > /dev/watchdog -> Ressource busy 测试(以 root 身份): ls crw-rw-r
每次修改某个文件时,我都尝试启动一个 python 脚本。准确地说,我在 Raspberry Pi 的串行端口上有一个设备,它将数据写入文本文件 (test.txt)。我已经尝试过这两种工具 - Wa
我正在尝试实现大致如下所示的服务关系: {ACTIVITY} -> {SERVICE1} -> {SERVICE2} ACTIVITY 启动 SERVICE1,然后启动 SERVICE2。 SERVI
我有系统服务。我想为此实现一个看门狗。 就像 [Unit] Description=Watchdog example service [Service] Type=notify Environment
我正在实现一个 ruby 服务器来处理从 GPRS 模块创建的套接字。问题是当模块掉电时,没有迹象表明 socket 已关闭。 我正在做线程来处理同一个服务器的多个套接字。我要问的是:有没有办法在
我不想启用 linux onedrive 服务,因为我注意到它对我的 cpu 来说很吃力,所以我宁愿按需运行它。这就是为什么我试图创建一个小脚本,仅当我访问 OneDrive 目录时才会运行一次 on
我一直在使用 tkinter 组合看门狗模块来处理一些上传请求。大多数时候它工作正常,但有时我们的网络驱动器会不稳定并断开连接一段时间。但是我无法找到捕获此错误的正确位置。 from watchdog
我是这个论坛的新手,想请教专家一个问题。我写了下面的程序(一个更大的东西的一部分,但这是给我带来麻烦的代码) #include #include int main() { int fd;
我对使用 iOS 崩溃日志有些陌生 - 我非常熟悉基于应用程序的崩溃日志,因为它们很容易被符号化,但我仍在尝试弄清楚如何读取生成的日志看门狗超时。明确地说,这些超时是由我正在编写的通知中心小部件引起的
我是一名优秀的程序员,十分优秀!