2010-04-06 11 views
0

J'ai un programme qui surveille un dossier avec des documents Word pour toutes les modifications apportées sur les fichiers. L'erreur -Windows Error [2] Le système ne trouve pas le fichier spécifié- vient quand j'exécute le programme, ouvre un fichier .doc dans le dossier, apporte quelques modifications et le sauvegarde. Des suggestions sur la façon de résoudre ce problème?Fichier io erreur Python

Edit1: le code d'erreur réelle est comme ce

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' 

Voici le code:

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

Il semble y avoir une erreur de syntaxe. Les deux dernières lignes sont indentées de la même quantité d'espace. Est-ce correct? –

+0

L'un des fichiers est-il ouvert dans un autre programme pendant que vous exécutez le script? –

+0

l'OP mentionne "word documents" et ".doc", mais dans le code, je vois seulement des références à "archivo.txt". aussi, fait intéressant, le mot "archivo" signifie "fichier" en espagnol, et "colegio" signifie "lycée" ... hmmm. – wescpy

Répondre

0

essayer d'utiliser os.path.join() par exemple

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

Je pense que le retraçage, il est tout à fait clair que le fichier temporaire a été supprimé entre n os.walk et os.stat appels. Vous n'avez pas vraiment besoin d'utiliser le os.walk si vous n'êtes pas récursif dans les sous-répertoires. Vous pouvez utiliser glob.iglob pour obtenir la liste des fichiers doc uniquement:

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

Je l'ai fait et encore ça ne marche pas, mais merci pour la nouvelle info. La seule solution que j'ai trouvée pour le problème est de retarder la fonction de vérification quelque temps. – serpiente

+0

@serpiente: dans votre fonction 'check', vous devez également utiliser' glob.iglob'. vous n'avez pas besoin de tous les fichiers que 'os.listdir' renvoie, mais seulement des fichiers doc. – SilentGhost

Questions connexes