Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查CSV文件是否未被其他进程使用?_Python_Python 3.x_Pandas_Csv_Python Watchdog - Fatal编程技术网

Python 如何检查CSV文件是否未被其他进程使用?

Python 如何检查CSV文件是否未被其他进程使用?,python,python-3.x,pandas,csv,python-watchdog,Python,Python 3.x,Pandas,Csv,Python Watchdog,我随身带着一个传感器,可以感知数据并积累数据,并定期将其放入CSV文件(每次创建新的CSV文件时) 我正在使用WatchdogAPI将手表放在新生成的CSV文件上。每次我尝试使用“read_CSV()”函数读取新生成的CSV文件时,我都无法读取该文件。我知道这是因为我的传感器首先创建了临时文件,如下面的屏幕截图所示: 我认为pandas read_csv()函数在将传感器数据放入文件后完全关闭之前无法读取该文件 关于如何读取CSV文件有什么建议吗?或者检查文件是否已完全关闭 我的代码: imp

我随身带着一个传感器,可以感知数据并积累数据,并定期将其放入CSV文件(每次创建新的CSV文件时)

我正在使用WatchdogAPI将手表放在新生成的CSV文件上。每次我尝试使用“read_CSV()”函数读取新生成的CSV文件时,我都无法读取该文件。我知道这是因为我的传感器首先创建了临时文件,如下面的屏幕截图所示:

我认为pandas read_csv()函数在将传感器数据放入文件后完全关闭之前无法读取该文件

关于如何读取CSV文件有什么建议吗?或者检查文件是否已完全关闭

我的代码:

import os
import pandas as pd
from PyQt5 import QtCore, QtWidgets
from watchdog.events import PatternMatchingEventHandler
from watchdog.observers import Observer
from Append_Function import append_df_to_excel
import time


class Emitter(QtCore.QObject):
    newDataFrameSignal = QtCore.pyqtSignal(pd.DataFrame)


class Watcher:
    def __init__(self):
        self.watch_dir = os.getcwd()
    self.directory_to_watch = None
    self.emitter = Emitter()
    self.observer = Observer()
    self.event_handler = Handler(
        emitter=self.emitter,
        patterns=["*.CSV"],
        ignore_patterns=["*.tmp"],
        ignore_directories=True
    )

def set_filename(self, filename):
    self.directory_to_watch = os.path.join(self.watch_dir, filename)

def run(self):
    self.observer.schedule(self.event_handler, self.directory_to_watch, recursive=False)
    self.observer.start()

def stop_watcher(self):
    self.observer.stop()


class Handler(PatternMatchingEventHandler):
def __init__(self, *args, emitter=None, **kwargs):
    super(Handler, self).__init__(*args, **kwargs)
    self._emitter = emitter
    self.file_name = time.strftime("%Y%m%d-%H%M%S")+".xlsx"

def on_any_event(self, event):
    done_flag = False
    if event.is_directory:
        return None
    elif event.event_type == 'created':
        # Take any action here when a file is first created.
        print("Received created event - %s." % event.src_path)

        if os.path.isfile(os.path.join(os.getcwd(), self.file_name)):
            try:
                df = pd.read_csv(event.src_path)
                append_df_to_excel(os.path.join(os.getcwd(), self.file_name),
                                       pd.read_csv(event.src_path, index_col=0))
                self._emitter.newDataFrameSignal.emit(df.copy())
                df.set_index(df.columns.values.tolist()[0], inplace=True)

            except Exception as e:
                print("File not ready", e)
        else:
            try:
                df = pd.read_csv(event.src_path)
                append_df_to_excel(os.path.join(os.getcwd(), self.file_name),
                                   pd.read_csv(event.src_path, index_col=0))
                self._emitter.newDataFrameSignal.emit(df.copy())
                df.set_index(df.columns.values.tolist()[0], inplace=True)

            except Exception as e:
                print("File not ready", e)

    elif event.event_type == 'modified':
        print("Modified created event - %s." % event.src_path)

        try:
            df = pd.read_csv(event.src_path)
            append_df_to_excel(os.path.join(os.getcwd(), self.file_name),
                               pd.read_csv(event.src_path, index_col=0))
            self._emitter.newDataFrameSignal.emit(df.copy())
            df.set_index(df.columns.values.tolist()[0], inplace=True)

        except Exception as e:
            print("File not ready", e)
    else:

        try:
            df = pd.read_csv(event.src_path)
            append_df_to_excel(os.path.join(os.getcwd(), self.file_name),
                               pd.read_csv(event.src_path, index_col=0))
            self._emitter.newDataFrameSignal.emit(df.copy())
            df.set_index(df.columns.values.tolist()[0], inplace=True)

        except Exception as e:
            print("File not ready", e)


class DataFrameTableWidget(QtWidgets.QTableWidget):

@QtCore.pyqtSlot(pd.DataFrame)
def append_dataframe(self, df):
    df = df.copy()
    df = df.astype('float64', errors='ignore')
    df = df.round(decimals=2)
    if df.columns.size > self.columnCount():
        self.setColumnCount(df.columns.size)
    r = self.rowCount()
    if r == 0:
        self.insertRow(r)
        for c, column in enumerate(df):
            it = QtWidgets.QTableWidgetItem(column)
            self.setItem(r, c, it)
    i = self.rowCount()
    for r, row in df.iterrows():
        self.insertRow(self.rowCount())
        for c, (column, value) in enumerate(row.iteritems()):
            it = QtWidgets.QTableWidgetItem(str(value))
            self.setItem(i + r, c, it)

是的,在文件关闭之前,您可能正在阅读它-您是否尝试过在正确的目录中创建文件,但文件名是观察者看不到的(即没有.csv扩展名),然后关闭后重命名文件,以便观察者看到文件时文件已完成?@barny否,我没有。让我试试,我会告诉你的。@barny相同的错误“文件未准备好[Errno 2]文件b'C:/Users/viral/Desktop/Sample\\998\u 20190420T060513.txt”不存在:b'C:/Users/viral/Desktop/Sample\\998\u 20190420T060513.txt”我将文件从CSV更改为TXT,然后我将其放入目录中,然后将扩展名从TXT更改为CSV,得到了上面提到的错误。您的代码不应该试图读取.TXT文件。请在问题中编辑完整的错误消息。并将所有这些
更改为e
以使它们
引发而不是继续,这很可能隐藏了真正的错误。