2017-06-01 69 views
0

我對Python相對比較陌生,我試圖製作一個腳本,用於查找在兩個日期之間創建的文件(照片),並將它們放入一個文件夾。 爲此,我需要以某種方式獲取文件的創建日期(在Windows上爲Im)。 我已經有了一切編碼,但我只需要獲取每張圖片的日期。看到返回日期的形式也很有趣。最好的結果是m/d/y或d/m/y(d =日; m =月,y =年)。 謝謝大家!我是這個論壇的新手Python:找到兩個設置日期之間創建日期的文件(PNG)

+0

到目前爲止您嘗試了什麼? – Mureinik

+0

您正在搜索特定文件夾或整個系統中的文件嗎? –

回答

0

請參閱Python os包中的基本系統命令,包括帶選項的目錄列表。您將能夠提取文件日期。有關日期操作,請參閱Python datetime包。

此外,請檢查您的版本上的可用Windows命令:它們中的大多數都具有帶日期參數的搜索功能;你可以簡單地使用OS系統命令返回所需的文件名。

1

我想你是以某種方式列出文件,如果是的話,然後使用 os.stat(path).st_ctime得到在Windows中的創建時間,然後使用日期時間模塊字符串格式它。

https://docs.python.org/2/library/stat.html#stat.ST_CTIME

https://stackoverflow.com/a/39359270/928680 這個例子說明如何將的mtime(修改)時間轉換,但同樣適用於的ctime(創建時間)

一旦你擁有了它的相對簡單的ctime,以檢查是否該在一系列

https://stackoverflow.com/a/5464465/928680

,您將需要轉換爲字符串之前做你的約會邏輯下降。

解決方案之一,不是很有效率..只是爲了顯示這可以做的一種方式。

import os 
from datetime import datetime 

def filter_files(path, start_date, end_date, date_format="%Y"): 
    result = [] 
    start_time_obj = datetime.strptime(start_date, date_format) 
    end_time_obj = datetime.strptime(end_date, date_format) 
    for file in os.listdir(path): 
     c_time = datetime.fromtimestamp(os.stat(file).st_ctime) 
     if start_time_obj <= c_time <= end_time_obj: 
      result.append("{}, {}".format(os.path.join(path, file), c_time)) 
    return result 


if __name__ == "__main__": 
    print "\n".join(filter_files("/Users/Jagadish/Desktop", "2017-05-31", "2017-06-02", "%Y-%m-%d")) 

乾杯!

+0

非常感謝!我後來測試這個。另外:是否有一種「簡單」的方式來獲取文件夾內的所有文件,然後搜索在指定的時間範圍內創建的文件?:) – crazycoder69

+0

我已經添加了一個示例到答案,該文件在兩個日期之間過濾文件 – Jag

0

您可以使用subprocess在文件上運行shell命令來獲取該文件的meta_data。

import re 
from subprocess import check_output 

meta_data = check_output('wmic datafile where Name="C:\\\\Users\\\\username\\\\Pictures\\\\xyz.jpg"', shell=True) 

# Note that you have to use '\\\\' instead of '\\' for specifying path of the file 

pattern = re.compile(r'\b(\d{14})\b.*') 

re.findall(pattern,meta_data.decode()) 

=> ['20161007174858'] # This is the created date of your file in format - YYYYMMDDHHMMSS 
相關問題