Я получаю ошибку ввода-вывода для файла, который не находится в пути, где я анализирую файлы - PullRequest
0 голосов
/ 26 апреля 2011

Я постоянно получаю сообщение об ошибке, когда открываю все текстовые и журнальные файлы по определенному пути и распечатываю журнал, в котором найдено совпадение. Ниже возвращена ошибка и код. Кто-нибудь знает, почему я получаю эту ошибку; код работает так, как он должен работать? Спасибо!

ОШИБКА:

file: c:\Python27\13.00.log

Traceback (most recent call last):
  File "C:\Python27\allfiles.py", line 20, in <module>
    f=open(file, "r")
IOError: [Errno 2] No such file or directory: 'LICENSE-OpenSSL.txt'

КОД:

import os, sys
import string

userstring = 'Rozelle07'
path = 'c:\\Python27'

for root,dirname, files in os.walk(path): 
    for file in files:
       if file.endswith(".log") or file.endswith(".txt"):
           f=open(file, "r")
           for line in f.readlines():
              if userstring in line:
                 print "file: " + os.path.join(root,file)             
                 break
           f.close()

Ответы [ 2 ]

1 голос
/ 26 апреля 2011

Я думаю, вам нужно открыть файл, используя его абсолютный путь, а не только имя файла. Попробуйте изменить open(..) строку на f = open(os.path.join(root, file), и она должна работать.

Редактировать: У меня работает следующее (я тоже на Windows с Python 2.7):

#!/usr/bin/env python
import os

userstring = 'test'
path = 'c:\\Python27'

for root, dirname, files in os.walk(path): 
    for file in files:
        if file.endswith(".log") or file.endswith(".txt"):
            filepath = os.path.join(root, file)
            with open(filepath, 'r') as f:
                for line in f:
                    if userstring in line:
                        print "%s in %s" % (userstring, filepath)
                        break
                else:
                    print "%s NOT in %s" % (userstring, filepath)
1 голос
/ 26 апреля 2011

Когда вы открываете файл, переменная 'file' не содержит полный путь, поэтому вы получаете ошибку.

...