首页 > 解决方案 > 使用python将最近添加的.csv文件列表获取到目录中

问题描述

我有一个输出文件文件夹,其中所有文件都被转储,我需要每五分钟检查一次该文件夹并使用 python 获取所有最近添加的文件列表。

这样做的一种方法是使用集合,并获取非相交文件,还有其他更好的方法吗?

非常感谢它的代码片段。

谢谢

标签: pythonpython-3.x

解决方案


为了解决这个问题,您可以使用模块和模块中listdir()的特定方法。ossleep()time

import os
from time import sleep

path = "/path/to/folder/with/csv/files"

with open("log.txt", "a+") as log_file:
    while True:
        log_file.seek(0)
        existing = [f.strip() for f in log_file]

        csvs = [f for f in os.listdir(path) if f.endswith(".csv") and f not in existing]

        if len(csvs) > 0:
            print(f"Found {len(csvs)} new file(s):")
            for f in csvs:
                print(f)
            print("\n")
        else:
            print("Found 0 new files.")

        log_file.writelines([f"{f}\n" for f in csvs])

        sleep(300)

我们将现有的文件名存储在一个.txt文件中。您可以使用.json文件或您喜欢的任何其他文件类型。首先,我们使用with/open(以追加/读取模式)打开文件并获取先前存储在文本文件中的文件名列表。然后我们得到该目录中所有.csv不在文件中的文件的列表:

csvs = [f for f in os.listdir(path) if f.endswith(".csv") and f not in existing]

os.listdir()is 列出当前工作目录中的所有文件和文件夹。

以下if/else语句仅用于输出目的,不是必需的。它只是说:如果找到新的 csv 文件,打印每个文件的数量和名称。如果没有找到,则打印发现零

剩下要做的就是将新发现的文件名写入.txt文件,以便在下一次迭代中,它们将被标记为现有而不是新的:

log_file.writelines([f"{f}\n" for f in csvs])

最后一行,sleep(300),使程序等待 300 秒或 5 分钟,以再次迭代。


推荐阅读