使用 Python 按更新时间识别和加载目录中的最后一个 csv 文件

Posted

技术标签:

【中文标题】使用 Python 按更新时间识别和加载目录中的最后一个 csv 文件【英文标题】:Using Python to identify and load last csv file in directory by updated time 【发布时间】:2020-03-11 20:44:11 【问题描述】:

我正在使用 python 加载一个 csv 文件进行处理。

该目录包含许多文件并不断更新。当我运行脚本时,我希望它只选择目录中的最近更新的 csv 文件进行处理。

我的代码似乎可以做到这一点,但它并不能可靠地做到这一点。通常它会按预期使用最后一个 csv 文件,但有时它会使用较旧的文件并跳过最新的文件。我认为它可能是按字母数字排序,而不是按创建/更新时间排序。

有人可以建议对代码进行更改以使其更可靠地工作吗?

当前代码:

# Import python modules
import pandas as pd
import os

#Identify last csv file in directory
last_csv = sorted(list(filter(lambda x: '.csv' in x, os.listdir())))[-1]

#load csv into a pandas dataframe
df = pd.read_csv(last_csv, skip_blank_lines=False, header=[8], engine='python') 

我在其他线程中看到过 bash 和 java 版本,但是有没有办法用 python 来做呢?

该线程描述了如何对文件列表进行排序,但它通过从文件名解析日期和时间来工作。即使更新的时间不是文件名的一部分,我也希望能够找到最新的文件。

Python combining all csv files in a directory and order by date time

谢谢大家

【问题讨论】:

***.com/questions/237079/… 谢谢大家。 ggorlen 和 SpghttCd 都提供了完美运行的解决方案。 ggorlen 少了一个导入。 很高兴它成功了。我还应该注意,如果您需要最近的顶部nsort 很棒,但是如果您只想要顶部,那么对整个事物进行排序以获取最后一个元素是多余的并且语义较少;更喜欢max 只是为了感兴趣——你为什么认为你需要使用 pathlib 进行更多的导入? Afaics 它只是一个导入,它属于标准库。 好吧,显然我是个菜鸟,很容易忘记我的头脑,但是多一条导入线需要更多时间,对吧? (对于 ggorlen 的版本,我已经导入了 os。)我的意思是,不要夸大其词,我们谈论的是在我的规模上真正不重要的事情,而且实际上你确实有同样好的方法来我。非常感谢。 【参考方案1】:

看看你的排序尝试:

last_csv = sorted(list(filter(lambda x: '.csv' in x, os.listdir())))[-1]

这很清楚(好吧,如果你知道...):列出目录中的文件,只选择.csv 文件,列一个列表,然后排序。 .csv 是一个响亮的线索:您正在使用文件名;您的排序是通过整理顺序(具有更多字符的“字母”顺序)。

您的代码中没有任何内容可以获取文件创建/更新时间。您需要使用目录列表来获取它,或者遍历文件列表并为每个文件获取所需的时间戳。完成后,只需使用时间戳作为排序键进行排序。

这些步骤都有很好的记录;我希望您可以研究文件时间调用和带键排序的材料。

【讨论】:

【参考方案2】:

这是一种方法:

import os

path = "."
csvs = [x for x in os.listdir(path) if os.path.isfile(x) and x.endswith(".csv")]
most_recent = max(csvs, key=lambda x: os.stat(os.path.join(path, x)).st_mtime)

print(most_recent)

打开目录并按.csv 扩展名过滤。然后通过st_mtime 属性获取文件的max。这是目标目录中最近修改的 CSV 文件。

【讨论】:

【参考方案3】:

我想我会使用pathlib

from pathlib import Path

fld = '.'
files = Path(fld).glob('*.csv')

latest = max(files, key=lambda f: f.stat().st_mtime)

编辑:由于@ggorlen 对此的完全正确评论,将sorted 更改为max

【讨论】:

以上是关于使用 Python 按更新时间识别和加载目录中的最后一个 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章

即使在等待之后,Python 中的 Selenium 也无法识别 DOM 中的变化

双亲委派

Python setup.py:如何让 find_packages() 识别子目录中的包

如何在 python 中获得按创建日期排序的目录列表?

python更新后Pygame变慢

Scikit Learn - 通过加载 CSV 识别目标