2010-04-06 128 views
0

我有一個程序,監視文件夾的文件與文件的任何修改。錯誤-Windows錯誤[2]當我運行程序時系統找不到指定的文件,在文件夾內打開一個.doc文件進行一些更改並保存。對於如何解決這個問題,有任何的建議嗎?文件io錯誤Python

EDIT1:實際的錯誤代碼是這樣的

File "C:\Users\keinsfield\Desktop\docu.py", line 27, in check 
    if info[0]==os.stat(os.path.join(r"C:\Users\keinsfield\Desktop\colegio",file 
).st_ctime: 
WindowsError: [Error 2] The system cannot find the file specified: 'C:\\Users\\k 
insfield\\Desktop\\colegio\\~WRD1761.tmp' 

下面的代碼:

def archivar(): 
    txt = open('archivo.txt', 'r+') 
    for rootdir, dirs, files in os.walk(r"C:\Users\keinsfield\Desktop\colegio"): 
     for file in files: 
      time = os.stat(os.path.join(rootdir, file)).st_ctime 
      txt.write(file +','+str(time) + '\n') 
def check(): 
    txt = [col.split(',') for col in (open('archivo.txt', 'r+').read().split('\n'))] 
    files = os.listdir(r"C:\Users\keinsfield\Desktop\colegio") 
    for file in files: 
     for info in txt: 
       if info[0]==os.stat(os.path.join(r"C:\Users\keinsfield\Desktop\colegio",file)).st_ctime: 
        print "modified" 
+0

似乎有語法錯誤。最後兩行縮進相同的空間量。這是正確的嗎? – 2010-04-06 03:59:01

+0

在運行腳本時,是否有其他程序中的任何文件被打開? – 2010-04-06 04:48:00

+0

OP提到「word文檔」和「.doc」,但在代碼中,我只能看到對「archivo.txt」的引用。另外,有趣的是,「archivo」這個詞在西班牙文中是指「file」,「colegio」是指「高中」......嗯。 – wescpy 2010-04-06 05:07:56

回答

0

嘗試使用os.path.join()

root="c:\\" 
path=os.path.join(root,"Users","keinsfield","Desktop","colegio") 
.... 
for rootdir, dirs, files in os.walk(path): 
.... 
0

我覺得從回溯這是相當清除暫時文件被刪除撥打os.walkos.stat。如果您沒有遞歸到子目錄中,您並不需要使用os.walk。您可以使用glob.iglob獲取僅doc文件列表:

for file in glob.iglob(os.path.join(root, '*.doc')): 
    print(file) 
+0

我做到了這一點,但仍然無法正常工作,但感謝您提供新的信息。我發現的唯一解決方案是延遲檢查功能一段時間。 – serpiente 2010-04-06 16:03:07

+0

@serpiente:在你的'check'函數中,你還需要使用'glob.iglob'。你不需要'os.listdir'返回的所有文件,只需要doc文件。 – SilentGhost 2010-04-06 16:26:09