2010-04-06 3 views
0

У меня есть программа, которая контролирует папку с текстовыми документами для любых изменений, сделанных в файлах. Ошибка -Windows Error [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

Является ли какой-либо из файлов открытыми в другой программе во время запуска скрипта? –

+0

OP упоминает «текстовые документы» и «.doc», но в коде я вижу только ссылки на «archivo.txt». также, что интересно, слово «archivo» означает «файл» на испанском языке, а «colegio» означает «средняя школа» ... хммм. – wescpy

ответ

0

пытаются использовать os.path.join() например

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

Я думаю, что из TRACEBACK это довольно ясно, что временный файл был удален betwee n os.walk и os.stat звонки. Вам не нужно использовать os.walk, если вы не возвращаетесь в подкаталоги. Вы можете использовать glob.iglob, чтобы получить список только файлов документов:

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

Я сделал это и все еще не работает, но спасибо за новую информацию. Единственное решение, которое я нашел для проблемы, - это отсрочка функции проверки. – serpiente

+0

@serpiente: в вашей функции 'check' вам также нужно использовать' glob.iglob'. вам не нужны все файлы, возвращаемые 'os.listdir', но только файлы doc. – SilentGhost