2012-02-17 116 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