我有多個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!我感謝您的幫助。 –