python - 使用python将最近添加的.csv文件列表获取到目录中
问题描述
我有一个输出文件文件夹,其中所有文件都被转储,我需要每五分钟检查一次该文件夹并使用 python 获取所有最近添加的文件列表。
这样做的一种方法是使用集合,并获取非相交文件,还有其他更好的方法吗?
非常感谢它的代码片段。
谢谢
解决方案
为了解决这个问题,您可以使用模块和模块中listdir()
的特定方法。os
sleep()
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 分钟,以再次迭代。
推荐阅读
- swift - 对结构中的布尔变量进行排序
- arrays - 如何在 html Nativescript 中显示 Json 多条数据
- android - Android WorkManager 链式工作未在 alpha04 上运行
- java - Swagger 安全性 - 当父级为私有时将子路径标记为公共?例如 /api/public/** 和 /api/**
- xml - 如何跨多个元素共享注释
- java - Jetty Mutual TLS auth 找不到客户端证书
- javascript - 使用 x_axis 和 y_axis 生成多维数组
- c++ - 内联汇编中的 CMOV 无法按预期工作
- wordpress - 在帖子元中按日期排序
- java - 从函数/方法中设置“android:text”值