2015-10-20 58 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

謝謝阿迪!我也會嘗試這種方法。最好! –