0

この部分を正しく行っているかどうか教えてください。過去 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. -1 4012 60 68311760 09 Jan 18:34 5_YEAR_912828UE8_20130109.DAT -RW-R - R-- 1 4012 60 54215712 09 1月18:35 7_YEAR_912828UF5_2013010109 :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 r--r-- 1 4012 60 21659138 04 1 月 18:31 3_YEAR_912828UC2_20130104.dat -rw-r--r-- 1 4012 60 91281894 04 1 月 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_912828TY03-da-r-rw101. -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--R--R--R--R--R-- 6066666666666666666 698760 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 1 月 18:28 10_YEAR_912828TY6_20130107.dat -rw-r--r-- 1 4012 60 43050822 07 1 月 18:29 30_YEAR_912810QY7_20130107.dat -rw-r--r-- 1 4012 60 2713906 08 1 月 18:31 2_YEAR_912828UD0_20130108.dat -rw-r--r-- 1 4012 60 8889264 08 1 月 18:31 3_YEAR_912828UC2_2013908. -1 4012 60 63857903 08 Jan 18:32 5_YEAR_912828UE8_20130108.DAT -RW-R - R-- 1 4012 60 55544096 08 1月18:34 18:36 10_YEAR_912828TY6_20130108.dat -rw-r--r-- 1 4012 60 59233399 08 1 月 18:37 30_YEAR_912810QY7_20130108.dat34 7_YEAR_912828UF5_20130108.DAT -RW-R - R-- 1 4012 60 89750161 08 1月18:36 10_YEAR_912828TY6_20130108.DAT -RW-R - R-- 1 4012 60 59233399 08 JAN 18:37 3018DID18DID18888812834 7_YEAR_912828UF5_20130108.DAT -RW-R - R-- 1 4012 60 89750161 08 1月18:36 10_YEAR_912828TY6_20130108.DAT -RW-R - R-- 1 4012 60 59233399 08 JAN 18:37 3018DID18DID188888128

4

4 に答える 4

3

file.st_mtime整数のタイムスタンプです。 dayToStrは文字列です。

Python2 では、アルファベット順で inが in の前に来るというかなり恣意的な理由から、integers 常にless than を比較します。stringsiintsstr

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

Python3 では、intを a と比較するとstrTypeError が発生します。

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

代わりに、datetime オブジェクトを比較します。

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

参考文献:

  • datetime.fromtimestampDT.datetime : タイムスタンプをオブジェクトに変換するために使用されました。
  • datetime.replace : これは、時間、分、秒 (のyesterday) をゼロに戻すために提案されました。
于 2013-01-10T20:12:43.823 に答える
0

方法の例を次に示します。

  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."
    
于 2015-07-06T23:21:03.973 に答える
0

「昨日」と比較すると失敗するように見える

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

于 2013-01-10T20:57:04.637 に答える
-1

paramikoを使用してリモートホストにSFTPを送信し、ディレクトリ内のファイルに対してアクションを実行しているため、osモジュールが機能するとは思わない

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
于 2013-01-10T20:29:10.427 に答える