2015-11-11 45 views
4

需要遍歷當前目錄並獲取最近5分鐘內修改的文件。我纔剛剛開始這一點,這是我迄今爲止如何在最近5分鐘內更改文件

#!/usr/bin/python 

import os,sys,time 

dir = os.getcwd() 

print dir 


for f in os.walk(dir): 
    for i in os.stat(f).st_mtime: 
    print i 

當我運行此我得到這個錯誤

for i in os.stat(f).st_mtime: 

類型錯誤:脅迫爲Unicode:需要字符串或緩衝區,元組發現

我想了解什麼導致這之前我移動

+0

錯誤是什麼? –

回答

3

你需要解壓的文件加入到根目錄下,並比較:

import os, time 

_dir = os.getcwd() 
files = (fle for rt, _, f in os.walk(_dir) for fle in f if time.time() - os.stat(
    os.path.join(rt, fle)).st_mtime < 300) 

print(list(files)) 

os.stat(filename).st_mtime返回不能被重複的時間時,你需要比較那個時間到當前時間,time.time()本身返回自紀元以來的秒數,因此您需要比較time.time() - os.stat(os.path.join(rt, fle)).st_mtime與以秒爲單位的分鐘數之間的差異,即300秒。

如果要監視的目錄,你會發現watchdog有用,在文檔的例子不正是你想要什麼:

import sys 
import time 
import logging 
from watchdog.observers import Observer 
from watchdog.events import LoggingEventHandler 

if __name__ == "__main__": 
    logging.basicConfig(level=logging.INFO, 
         format='%(asctime)s - %(message)s', 
         datefmt='%Y-%m-%d %H:%M:%S') 
    path = sys.argv[1] if len(sys.argv) > 1 else '.' 
    event_handler = LoggingEventHandler() 
    observer = Observer() 
    observer.schedule(event_handler, path, recursive=True) 
    observer.start() 
    try: 
     while True: 
      time.sleep(1) 
    except KeyboardInterrupt: 
     observer.stop() 
    observer.join() 

它遞歸地檢查當前目錄中文件的更改,並記錄到控制檯的任何變化。

6

os.walk()生成元組,你試圖使用一個字符串。你想要的東西:

for root, dirs, files in walk(wav_root): 
    for f in files: 
     filename = root + f 
     # Now use filename to call stat().st_mtime 

我相信。在迭代os.walk()時,無論您身處何處,加入rootf都會產生絕對路徑IIRC。

在這裏看到更多:http://www.tutorialspoint.com/python/os_walk.htm

相關問題