【问题标题】:Automate the Script whenever a new folder/file is added in directory in Python每当在 Python 的目录中添加新文件夹/文件时自动执行脚本
【发布时间】:2021-10-15 06:18:59
【问题描述】:

我在一个目录中有多个文件夹,每个文件夹都有多个文件。我有一个代码,它检查每个文件夹中的特定文件,如果存在特定文件,则进行一些数据预处理和分析。 下面给出了它的一个sn-p。

import pandas as pd
import json
import os

rootdir = os.path.abspath(os.getcwd())

df_list = []

for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        if file.startswith("StudyParticipants") and file.endswith(".csv"):
            temp = pd.read_csv(os.path.join(subdir, file))
                           .....
                           ..... 
                          'some analysis'

Merged_df.to_excel(path + '\Processed Data Files\Study_Participants_Merged.xlsx')

现在,我想自动化这个过程。 我希望在添加新文件夹时执行此脚本。这是我第一次探索自动化过程,我坚持了很长一段时间没有取得重大进展。

我正在使用 Windows 系统和 Jupyter notebook 来创建这些数据框并执行分析。

非常感谢任何帮助。 谢谢。

【问题讨论】:

    标签: python-3.x windows automation jupyter-notebook


    【解决方案1】:

    我写了一个脚本,你应该只运行一次它就可以工作。 请注意:

    1.) 此解决方案不考虑创建的文件夹。如果需要这些信息,我可以重写答案。

    2.) 此解决方案假定不会从主文件夹中删除文件夹。如果不是这样,我也可以重写答案。

    import time
    import os
    
    
    def DoSomething():
        pass
    
    
    if __name__ == '__main__':
        # go to folder of interest
        os.chdir('/home/somefolders/.../A1')
        # get current number of folders inside it
        N = len(os.listdir())
        while True:
            time.sleep(5)  # sleep for 5 secs
            if N != len(os.listdir()):
                print('New folder added! Doing something useful...')
                DoSomething()
                N = len(os.listdir())  # update N
    

    【讨论】:

    • 我可以在选择以“RK22BB”开头的文件夹方面获得一些帮助吗?如果添加了新文件夹并且它以“RK22BB”开头,则必须运行代码。我想在 while 中插入一个 for 循环,但我认为这需要很长的处理时间。我敢肯定,会有一种有效的方法。
    • 不用考虑太多: 1.) 在“while”循环之前,创建所有文件夹的列表。例如my_folders = os.listdir() 2.) 如果 N != len(os.listdir()),则表示添加了一个新文件夹。 3.) 找出 my_folders 和 os.listdir() 之间的区别。例如:difference = list(set(my_folders) - set(os.listdir())) 我不确定这是最有效的方法。您还可以遍历整个列表“os.listdir()”并通过将列表的元素与您要查找的文件夹的名称进行比较来查找您的文件夹。我的评论限制为 600 个字符,希望对我有所帮助。
    【解决方案2】:

    看看看门狗。

    http://thepythoncorner.com/dev/how-to-create-a-watchdog-in-python-to-look-for-filesystem-changes/

    您也可以自己编写一个非常简单的看门狗服务。

    1. 列出您要观察的目录中的所有文件
    2. 等待您定义的时间跨度,例如每隔几秒一次
    3. 再次制作文件系统列表
    4. 比较两个列表,取其不同
    5. 此差异的结果列表是您的文件系统更改

    最好的问候

    【讨论】:

      猜你喜欢
      • 2018-09-08
      • 2023-03-09
      • 2011-10-25
      • 2021-06-29
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多