我有多个csv文件(每天生成每个文件)与通用文件名(如file_
),我追加日期戳给他们。例如:file_2015_10_19
,file_2015_10_18
等等。Python - 只读最新文件
现在,我只想读取5个最新文件并创建一个比较图。
对我来说,绘图不是问题,但排序的所有文件,只读最新的5是。
我有多个csv文件(每天生成每个文件)与通用文件名(如file_
),我追加日期戳给他们。例如:file_2015_10_19
,file_2015_10_18
等等。Python - 只读最新文件
现在,我只想读取5个最新文件并创建一个比较图。
对我来说,绘图不是问题,但排序的所有文件,只读最新的5是。
您需要读取所有文件,然后对它们进行排序。我害怕没有捷径。
您可以通过最后修改时间排序,或和排序日期
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]'。前者给出列表中的最后五项,后者给出除了最后五项之外的所有内容。 – clwainwright
感谢Burhan!这非常有帮助。 –
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提到他将日期标记附加到文件中,所以上述内容应该可以工作。另外,在发布之前,我在本地尝试了相同的代码(不止一次),并注意到'文件[: - 5]'有效。 –
谢谢阿迪!我也会尝试这种方法。最好! –
一旦你有一个文件名的列表,为什么不只是在列表上做一个普通的旧排序呢?例如'last_five = sorted(list_of_files)[ - 5:]'。这是假定每个文件前缀都是相同的。 – clwainwright
谢谢clwainwright!我感谢您的帮助。 –