csv 如何从文件名以日期结尾的目录中只加载最近的文件?

slwdgvem  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(135)

我在一个名为的目录/文件夹中有文件:

  1. sacoronavirus_total_number_vaccinated_type_2022-04-30.csv
  2. sacoronavirus_total_number_vaccinated_type_2022-05-31.csv
  3. sacoronavirus_total_number_vaccinated_type_2022-06-30.csv
  4. sacoronavirus_total_number_vaccinated_type_2022-07-31.csv
  5. sacoronavirus_total_number_vaccinated_type_2022-08-31.csv
    该文件夹将更新为每月的文件,格式与上述相同。例如:
  • sacoronavirus_total_number_vaccinated_type_2022-09-30.csv
  • sacoronavirus_total_number_vaccinated_type_2022-10-31.csv

我只想把最近一个月的.csv文件加载到Pandas数据框中,而不是所有的文件。我该怎么做呢(也许用glob)?
下面的代码通过元数据获取大多数文件的加载日期,而不是文件名的字符串

import glob
import os

list_of_files = glob.glob('/path/to/folder/*') # * means all if need specific format then *.csv
latest_file = max(list_of_files, key=os.path.getctime)
print(latest_file)

注意同一目录中有其他文件具有不同的前缀。

iyzzxitl

iyzzxitl1#

如果所有文件都有相同的前缀,那么您需要做的就是获取名称排序列表中的最后一个文件,因为ISO 8601日期字符串在字典上是可比较的:

import glob
import os

list_of_files = sorted(glob.glob('/path/to/folder/.csv*'))
latest_file = list_of_files[-1]
print(latest_file)

其实,就

latest_file = max(glob.glob('/path/to/folder/.csv*'))

如果您不需要完整的列表,也可以使用。

3mpgtkmj

3mpgtkmj2#

这里有一个建议,使用pathlib按文件名选择最近的文件。

from pathlib import Path
import pandas as pd

dir_files = r'/path/to/folder/*'

dico={}

for file in Path(dir_files).glob('sacoronavirus_total_number_vaccinated_*.csv'):
    dico[file.stem.split('_')[-1]] = file

max_date = max(dico) # There is no need to parse ISO 8601 dates

然后,您可以使用pandas.read_csv并传递文件路径来创建 Dataframe 。

df = pd.read_csv(dico[max_date])

相关问题