【问题标题】:Get the file name which contains the latest timestamp in a directory using python使用python获取目录中包含最新时间戳的文件名
【发布时间】:2021-12-28 07:48:29
【问题描述】:

假设在一个目录中我有多个这样的文件:

Test1_2021-05-17 1139.xlsx
Test1_2021-04-17 1139.xlsx
Test1_2021-03-17 1139.xlsx
Test1_2021-02-17 1139.xlsx
Test1_2021-01-17 1139.xlsx
Test2_2021-05-17 1139.xlsx
Test2_2021-04-17 1139.xlsx
Test2_2021-03-17 1139.xlsx
Test2_2021-02-17 1139.xlsx

如何找到包含最新时间戳的文件,然后我想将其作为数据框打开。

所以,例如。 o 要获取文件名:Test1_2021-05-17 1139.xlsx。我如何用 python 做到这一点?

我试过这个,但它没有让我得到文件名上带有最新时间戳的文件:

import glob
import os

list_of_files = glob.glob('/path/*') 
latest_file = max(list_of_files, key=os.path.getctime)
print(latest_file)

【问题讨论】:

  • 为什么不Test2_2021-05-17 1139.xlsx?它不是基于文件名的吗?
  • 是的,我想打开以 Test1 开头且时间戳最新的文件,可能我不够清楚,抱歉
  • @corralien 是的,这就是为什么我需要使用最新时间戳打开文件的原因,因为我想检查文件的内容,因为与之前的文件相比,里面的值发生了变化
  • 对不起,我的意思是:您需要检查每个文件的内容吗?

标签: python python-3.x dataframe


【解决方案1】:

如果你真的需要根据文件名来做,你可以将lamdba函数传递给max(),以正确修改项目:

fNames = '''.../0010/Test1_2021-05-17 1139.xlsx
.../1212/Test1_2021-04-17 1139.xlsx
.../1212/Test1_2021-03-17 1139.xlsx
.../1444/Test1_2021-02-17 1139.xlsx
.../1212/Test1_2021-01-17 1139.xlsx
.../19/Test2_2021-05-17 1139.xlsx
.../1212/Test2_2021-04-17 1139.xlsx
.../1212/Test2_2021-03-17 1139.xlsx
.../1212/Test2_2021-02-17 1139.xlsx'''.splitlines()

# use only files containing 'Test_1':
fNames = [f for f in fNames if 'test1_' in f.lower()]

# rsplit removes the directory names.
max_fName = max(
    fNames, key=lambda p: p.rsplit('/', 1)[1].split('_', 1)[1].split(' ', 1)[0]
)
print(max_fName)

#or hard coded:
max_fName = max(fNames, key=lambda p: p.rsplit('/', 1)[1][6:16])
print(max_fName)

输出:

.../0010/Test1_2021-05-17 1139.xlsx
.../0010/Test1_2021-05-17 1139.xlsx

【讨论】:

  • 非常感谢@maurice,这个也有效
【解决方案2】:

也许你必须先过滤你的文件名:

import pathlib
import os.path
import pandas as pd

filename = max([f for f in pathlib.Path('/path').glob('Test_*.xlsx')], 
               key=os.path.getctime)

df = pd.DataFrame(filename)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2014-04-07
    • 1970-01-01
    • 2017-12-02
    • 2021-10-30
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多