【问题标题】:Python - Read and plot only the latest filesPython - 仅读取和绘制最新文件
【发布时间】:2016-01-18 14:58:56
【问题描述】:

我有多个带有通用文件名(例如file_)的 csv 文件(每个文件每天生成),并且我在它们后面附加了日期戳。

例如:file_2015_10_19file_2015_10_18等等。

现在,我只想阅读 5 个最新文件并创建一个比较图。

对我来说,绘图没有问题,但对所有文件进行排序并只读取最新的 5 个文件。

【问题讨论】:

  • 一旦你有了一个文件名列表,为什么不在列表上做一个常规的旧排序呢?例如,last_five = sorted(list_of_files)[-5:]。这是假设每个文件前缀 this 是相同的。
  • 感谢 clwainwright!感谢您的帮助。

标签: python csv datestamp


【解决方案1】:

您需要阅读所有文件,然后对它们进行排序。恐怕没有捷径。

可以按最后修改时间排序,也可以解析日期组件,按日期排序

import glob
import os
import datetime

file_mask = 'file_*'
ts = 'file_%Y_%m_%d'
path_to_files = r'/foo/bar/zoo/'

def get_date_from_file(s):
    return datetime.datetime.strptime(s, ts)

all_files = glob.glob(os.path.join(path_to_files, file_mask))
sorted_files = sorted(all_files, key=lambda x: os.path.getmtime(x))[-5:]
sorted_by_date = sorted(all_files, key=get_date_from_file)[-5:]

【讨论】:

  • 我想你的意思是[-5:],而不是[:-5]。前者给出列表中的最后五项,后者给出除最后五项之外的所有内容。
  • 谢谢布尔汉!这很有帮助。
【解决方案2】:
import os

# list all files in the directory - returns a list of files
files = os.listdir('.')

# sort the list in reverse order
files.sort(reverse=True)

# the top 5 items in the list are the files you need
sorted_files = files[:-5]

希望这会有所帮助!

【讨论】:

  • @mac-pan 提到他将日期戳附加到文件中,因此上述内容应该可以工作。此外,我在发布之前(不止一次)在本地尝试了相同的代码,并注意到 files[:-5] 有效。
  • 谢谢阿迪!我也会试试这个方法。最好的!
猜你喜欢
  • 2021-02-10
  • 1970-01-01
  • 2023-03-26
  • 2014-08-25
  • 1970-01-01
  • 2012-03-17
  • 2021-11-22
  • 2015-01-30
  • 1970-01-01
相关资源
最近更新 更多