2017-06-20 17 views
0

私は初心者でPythonを使用しています。次のコードは、フォルダとその内容で作成された最新のファイルの名前を表示し、30秒ごとに印刷を続けます。値が前のサイクルと同じである場合の印刷を中止する方法 - Python

import glob  
import os  
import time 

while True: 

newest=max(glob.iglob('/Users/BetaBrawler/Downloads/HernanVillela/*'), key=os.path.getctime) 

print newest  
file = open(newest,'r')  
texto = [x.strip() for x in file.readlines()] 

print texto  
time.sleep(30) 

私はそれが新しいファイルがで作成された場合、次の出力が前の(同じファイルとその内容)のみの印刷と同じ値を持っている場合、コンソールは、印刷を停止することですやりたいだけの事フォルダー。ファイルが変更されていない場合 1.それは、30秒間スリープしていません:

答えて

0
import glob 
import os 
import time 

oldfile = None 
while True: 
    newest = max(glob.glob('/Users/BetaBrawler/Downloads/HernanVillela/*'), key=os.path.getctime) 

    if newest == oldfile: 
     time.sleep(30) 
     continue 

    oldfile = newest 
    with open(newest) as infile: 
     print [line.strip() for line in infile] 
    time.sleep(30) 
+0

このリファクタリングは、元のスクリプトのいくつかの行動を変えます。効果は、ファイルが変更されない場合、新しいファイルが見つかるまで内容が非常に迅速に印刷されることです。 2.ファイルの各行は 'strip'pされません。 3.これは正しく動作するには 'newest = oldfile'がおそらく' newest == oldfile'であるべきだと思います。 – theunraveler

+0

@theunraveler:バグレポートに感謝します。私は休みの日があると思う。 – inspectorG4dget

+0

@theunravelerコードは正常に動作しますが、作成された最後のファイルの内容のみが出力されます。ファイルの名前を印刷するために何かを追加または削除する必要がありますか? – Beta

0
import glob  
import os  
import time 

current = None 

while True: 
    newest = max(glob.iglob('/Users/BetaBrawler/Downloads/HernanVillela/*'), key=os.path.getctime) 

    if newest != current: 
     current = newest 
     print newest  
     with open(newest, 'r') as file_: 
      texto = [x.strip() for x in file_.readlines()] 
      print texto 

    time.sleep(30) 
関連する問題