簡體   English   中英

Python時間增量

[英]Python time delta

如果我正確地做這個部分,請告訴我。 我試圖抓取過去24小時內僅修改過的文件。 但是,無論修改時間如何,我的輸出都是目錄中的所有文件:

yesterday = date.today() - timedelta(days=1)
dayToStr = yesterday.strftime('%Y%m%d')

file_list_attr = sftp.listdir_attr()
for file in file_list_attr:
  if  file.st_mtime <= dayToStr:
    print file

產量

-rw-r - r-- 1 4012 60 3404961 09 Jan 18:32 2_YEAR_912828UD0_20130109.dat -rw-r - r-- 1 4012 60 10206411 09 Jan 18:32 3_YEAR_912828UG3_20130109.dat -rw-r - r- - 1 4012 60 68311760 09 Jan 18:34 5_YEAR_912828UE8_20130109.dat -rw-r - r-- 1 4012 60 54215712 09 Jan 18:35 7_YEAR_912828UF5_20130109.dat -rw-r - r-- 1 4012 60 88014103 09 Jan 18 :37 10_YEAR_912828TY6_20130109.dat -rw-r - r-- 1 4012 60 53565072 09 Jan 18:38 30_YEAR_912810QY7_20130109.dat -rw-r - r-- 1 4012 60 8527412 04 Jan 18:31 2_YEAR_912828UD0_20130104.dat -rw- r - r-- 1 4012 60 21659138 04 Jan 18:31 3_YEAR_912828UC2_20130104.dat -rw-r - r-- 1 4012 60 91281894 04 Jan 18:34 5_YEAR_912828UE8_20130104.dat -rw-r - r-- 1 4012 60 80421507 04 Jan 18:36 7_YEAR_912828UF5_20130104.dat -rw-r - r-- 1 4012 60 108700356 04 Jan 18:38 10_YEAR_912828TY6_20130104.dat -rw-r - r-- 1 4012 60 50204292 04 Jan 18:39 30_YEAR_912810QY7_20130104 .dat -rw-r - r-- 1 4012 60 2319656 07 Jan 18:24 2_YEAR_912828UD0_20130107.dat -rw-r - r-- 1 4012 60 6978760 07 Jan 18:24 3_YEAR_ 912828UC2_20130107.dat -rw-r - r-- 1 4012 60 53579177 07 Jan 18:25 5_YEAR_912828UE8_20130107.dat -rw-r - r-- 1 4012 60 46069381 07 Jan 18:26 7_YEAR_912828UF5_20130107.dat -rw-r- -r-- 1 4012 60 70802355 07 Jan 18:28 10_YEAR_912828TY6_20130107.dat -rw-r - r-- 1 4012 60 43050822 07 Jan 18:29 30_YEAR_912810QY7_20130107.dat -rw-r - r-- 1 4012 60 2713906 1月8日18:31 2_YEAR_912828UD0_20130108.dat -rw-r - r-- 1 4012 60 8889264 08 Jan 18:31 3_YEAR_912828UC2_20130108.dat -rw-r - r-- 1 4012 60 63857903 08 Jan 18:32 5_YEAR_912828UE8_20130108.dat -rw-r - r-- 1 4012 60 55544096 08 Jan 18:34 7_YEAR_912828UF5_20130108.dat -rw-r - r-- 1 4012 60 89750161 08 Jan 18:36 10_YEAR_912828TY6_20130108.dat -rw-r - r- - 1 4012 60 59233399 08年1月18日:37 30_YEAR_912810QY7_20130108.dat

file.st_mtime是一個整數時間戳。 dayToStr是一個字符串。

在Python2, integers 總是比較小於strings的相當武斷的理由是, iint而來的前sstr按字母順序排列:

In [123]: 1234 < 'foobar'
Out[123]: True

在Python3中,將intstr進行比較會引發TypeError:

>>> 1234 < 'foobar'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < str()

相反,比較日期時間對象:

import datetime as DT
import os

yesterday = DT.datetime.now() - DT.timedelta(days=1)
# or, if you want 00:00 AM, yesterday:
# yesterday = DT.datetime.now().replace(hour = 0, minute = 0, second = 0, microsecond = 0) - DT.timedelta(days=1)

file_list_attr = sftp.listdir_attr()
for pfile in file_list_attr:
    if DT.datetime.fromtimestamp(pfile.st_mtime) > yesterday:
        print pfile

參考文獻:

與'昨天'比較時似乎失敗

for pfile in file_list_attr:
    print DT.datetime.fromtimestamp(pfile.st_mtime)


2013-01-09 18:32:06
2013-01-09 18:32:22
2013-01-09 18:34:07
2013-01-09 18:35:27
2013-01-09 18:37:38

for pfile in file_list_attr:
    print DT.datetime.fromtimestamp(pfile.st_mtime) > yesterday



Traceback (most recent call last):
  File "<pyshell#41>", line 2, in <module>
    print DT.datetime.fromtimestamp(pfile.st_mtime) > yesterday
TypeError: can't compare datetime.datetime to datetime.date

這是一個如何做的例子:

  1. 列出目錄中的所有文件
  2. 打印所有符合24小時前修改條件的文件

      # Task: grab files ONLY modified in the past 24 hours import os import datetime myPath = "/users/george/documents/" # Adding all the files found in myFolder in a collection fileCollection = os.listdir(myPath) # Iterating through the files, printing their last modified date for i in fileCollection: # Getting the timestamp in a variable fileModTimeStamp = os.path.getmtime(myPath + str(i)) fileModDateTime = datetime.datetime.fromtimestamp(fileModTimeStamp) # Calculating the time delta currentTime = datetime.datetime.now() timeElapsed = currentTime - fileModDateTime # 24h dimedelta twentyFourHours = datetime.datetime(1900, 1, 2, 0, 0, 0, 0) - datetime.datetime(1900, 1, 1, 0, 0, 0, 0) # Print the files that meet the condition if timeElapsed <= twentyFourHours: print "The File: " + str(i) + " Was Last Modified At: " + str(fileModDateTime) + " ,Which was about: " \\ + str(timeElapsed) + " ago." 

我不相信os模塊將工作,因為我使用paramiko SFTP到遠程主機並對目錄中的文件執行操作

for filename in file_list_attr:
    mtime = os.path.getmtime(filename)
    print mtime



Traceback (most recent call last):
  File "<pyshell#22>", line 2, in <module>
    mtime = os.path.getmtime(filename)
  File "U:\ActivPy\lib\genericpath.py", line 54, in getmtime
    return os.stat(filename).st_mtime
TypeError: coercing to Unicode: need string or buffer, SFTPAttributes found

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM