2016-09-21 98 views
0

**問題** 我試圖打開(在python中)比當前名稱中的日期戳更早3天的文件。例如:2016_08_18_23_10_00 - JPN - MLB - Mickeymouse v Burgerface.ply。到目前爲止,我可以創建一個日期變量,但是我不知道如何在文件名中搜索這個變量。我想我需要先將它轉換爲字符串?打開文件名中日期戳超過3天的文件 - Python 2.7

from datetime import datetime, timedelta 
import os 
import re 
path = "C:\Users\michael.lawton\Desktop\Housekeeper" 

## create variable d where current date time is subtracted by 3 days ## 

days_to_subtract = 3 
d = datetime.today() - timedelta(days=days_to_subtract) 

print d 

## open file in dir where date in filename = d or older ## 

for filename in os.listdir(path): 
if re.match(d, filename): 
    with open(os.path.join(path, filename), 'r') as f: 
     print line, 

任何幫助將非常感激

+0

附註:使用Windows路徑的原始字符串(以及正則表達式)。它這次沒有咬你(你很幸運),但最終當你有一個路徑時,其中的文件或目錄的名字以'b','f','n '等等(讓你分別嵌入退格,換頁或換行符)。只需在文字前加一個'r'(並且不要用反斜槓結尾),例如'path = r「C:\ Users \ michael.lawton \ Desktop \ Housekeeper」'這不會偶然發生。 – ShadowRanger

+0

非常感謝! – user6705306

+0

如果你想打開3天以前的文件,而不是年輕的一分鐘,那麼你必須考慮當地的時區。請參閱[查找是否在日期時間之間經過了24小時 - Python](http://stackoverflow.com/q/26313520/4279) – jfs

回答

0

您可以使用strptime這一點。它會將您的字符串(假設它是正確的格式)轉換成DateTime對象,你可以用它來比較,如果你的文件是基於文件名年長超過3天:

from datetime import datetime 

... 

lines = [] 
for filename in os.listdir(path): 
    date_filename = datetime.strptime(filename.split(" ")[0], '%Y_%m_%d_%H_%M_%S') 
    if date_filename < datetime.datetime.now()-datetime.timedelta(days=days_to_subtract): 
    with open(os.path.join(path, filename), 'r') as f: 
     lines.extend(f.readlines()) # put all lines into array 

如果文件名是2016_08_18_23_10_00 - JPN - MLB - Mickeymouse v Burgerface.ply日期時間部分將用filename.split(" ")[0]提取。然後,我們可以用它來檢查它是否使用datetime.timedelta

+1

謝謝。最後的整數除法是什麼? ''打開文件' – user6705306

+0

對不起,這是soppused是一個評論,我習慣於在C編碼,其中//意味着一個評論:) – Linus

+0

它的工作原理,謝謝,真棒幫助! – user6705306

0

要打開指定目錄中包含時間戳在他們的名字年長超過3天的所有文件超過三天之久:

#!/usr/bin/env python2 
import os 
import time 

DAY = 86400 # POSIX day in seconds 
three_days_ago = time.time() - 3 * DAY 
for filename in os.listdir(dirpath): 
    time_string = filename.partition(" ")[0] 
    try: 
     timestamp = time.mktime(time.strptime(time_string, '%Y_%m_%d_%H_%M_%S')) 
    except Exception: # can't get timestamp 
     continue 
    if timestamp < three_days_ago: # old enough to open 
     with open(os.path.join(dirpath, filename)) as file: # assume it is a file 
      for line in file: 
       print line, 

的代碼假設時間戳在當地時區。在C mktime()有權訪問the tz database的平臺上(如果文件在72或73小時之前無關緊要,則忽略此段),可能需要考慮DST轉換。

考慮使用諸如「文件的上次修改時間」之類的文件元數據,而不是從名稱中提取時間戳:timestamp = os.path.getmtime(path)

+0

謝謝你們倆。由於日期戳和修改日期不同,我已經拿到了第一個答案。真的很感謝幫助。 – user6705306

相關問題