2012-02-17 141 views
-1

如何掃描文本文件的目錄並按修改日期讀取文本文件,將其打印到屏幕讓腳本每5秒掃描一次目錄以便對新文件進行creadted並打印。 是否有可能你可以幫助我我卡住了,我需要這個真正的壞,我已經得到了掃描目錄文件和打印,但它不打印日期更新的文件。文件修改和操作

import os,sys 
os.chdir(raw_input('dir_path: '))  
contents=os.listdir('.') #contents of the current directory 
files =[] 
directory=[] 
Time = time.ctime(os.path.getmtime(contents)) 
for i in contents: 
    if os.path.isfile(i) == True : 
     files.append(i) 
    elif os.path.isdir(i) == True : 
     directory.append(i) 
    #printing contents 
choice = ""  
for j in files: 
    while choice != "quit": 
      choice = raw_input("Dou you want to print file %s (y/n): "%j) 
      if choice == 'y': 
       print "**************************" 
       print "Printing Files %s" %j 
       print "**************************" 
       fileobj = open(j,'r') 
       contents = fileobj.readlines() 
       for k in contents: 
        sys.stderr.write(k) 
       else: 
        pass 

什麼,我想是我的代碼,而不是詢問是否要打印,我需要它來打印文件,如果當前的時間,如果它讀取只是放在目錄和新文件意味着修改一個進來它會讀取新文件而不會提示我。 它給我的錯誤是強制unicode:需要字符串或緩衝區,找到列表。

+0

你的問題不清楚。 「按修改日期閱讀文本文件」是什麼意思?你的意思是你想按修改時間順序打印所有文件嗎?或者,您是否只想打印自上次查看文件後發生更改的文件? – 2012-02-17 18:12:57

+0

你使用的是Linux嗎?如果是這樣,有一個更好的方法來監視文件系統事件的目錄:[pyinotify](http://pyinotify.sourceforge.net/)。對於[OSX](http://en.wikipedia.org/wiki/FSEvents)和[Windows](http://stackoverflow.com/questions/3517460/is-there-anything-like-inotify-在窗口/ 3517475#3517475)。 – unutbu 2012-02-17 18:14:41

+1

請不要發佈[確切的重複問題](http://stackoverflow.com/questions/9332264/file-modification-and-creation)。這是非常不禮貌的。 – 2012-02-17 18:23:23

回答

0

一個計時器重複動作

您可以通過一個無限循環與time.sleep()功能合併重複一個動作每五秒鐘,像這樣:

import time 
while True: 
    time.sleep(5)   # wait five seconds 
    print (time.time()) # print the time 

記得有某種break在這裏如果你需要它的條件,否則循環將永遠運行。

「類型錯誤:強迫爲Unicode:需要字符串或緩衝區,列表中找到」

您的問題是在該行

Time = time.ctime(os.path.getmtime(contents)) 

您所提供的文件名的列表os.path.getmtime函數預計一次一個文件名。該錯誤消息告訴你,它不知道如何將文件名列表轉換爲文件名。

+0

那麼我該如何去讀一次一個文件? – mintgreen 2012-03-06 15:09:42

+0

我的意思是按修改時間逐個打印目錄中的文件? – mintgreen 2012-03-06 15:15:49

+0

由'os.listdir()'返回的內容是一系列文件名。冥想你如何使用'for'循環遍歷每個元素的序列。 – 2012-03-06 18:00:23