2015-10-20 59 views
1

我有多个csv文件(每天生成每个文件)与通用文件名(如file_),我追加日期戳给他们。例如:file_2015_10_19,file_2015_10_18等等。Python - 只读最新文件

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

对我来说,绘图不是问题,但排序的所有文件,只读最新的5是。

+0

一旦你有一个文件名的列表,为什么不只是在列表上做一个普通的旧排序呢?例如'last_five = sorted(list_of_files)[ - 5:]'。这是假定每个文件前缀都是相同的。 – clwainwright

+0

谢谢clwainwright!我感谢您的帮助。 –

回答

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:] 
+1

我认为你的意思是'[-5:]',而不是'[:-5]'。前者给出列表中的最后五项,后者给出除了最后五项之外的所有内容。 – clwainwright

+0

感谢Burhan!这非常有帮助。 –

0
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] 

希望这有助于解析日期组件!

+0

@ mac-pan提到他将日期标记附加到文件中,所以上述内容应该可以工作。另外,在发布之前,我在本地尝试了相同的代码(不止一次),并注意到'文件[: - 5]'有效。 –

+0

谢谢阿迪!我也会尝试这种方法。最好! –