2016-03-31 2 views
-5

Я вообще не знаю Python, но я должен скоро запустить этот скрипт. Я искал аналогичные проблемы в Интернете, но я не могу найти точный сценарий.Python скрипт ищет несуществующий файл

Я запустил скрипт nameTime.py, который должен выводить имена пользователей и даты из access_log в список, который содержит число и имена каждого пользователя за каждый день в журнале. Сценарий не завершился и вывел следующую ошибку.

Traceback (most recent call last): 
    File "./nameTime.py", line 19, in <module> 
     f=open(file,'r') 
IOError: [Errno 2] No such file or directory: 'access_log-20150215' 

скопировать его из/и т.д./HTTPD/журналы в/Opt/журналы и это единственный access_log в этом каталоге. BTW, тот же самый скрипт с измененными os.chdir (...), и если команды file.startswith (...) работают в подкаталоге/opt/logs/ion (но в нем нет несуществующего файла) ,

Первые строки сценария:

import os 
import re 
os.chdir("opt/logs") 

user = [] 
dates = [] 
userlist = set() 
userPerDay = [] 
name = re.compile(r'\s[A-Z][A-Z\s*]+\.[A-Z]+[A-Z\s*]*\.[A-Z]+[A-Z\s*]*(?=\.[0-9]+)') 
longname = re.compile(r'\s[A-Z][A-Z\s*]+\.[A-Z]+[A-Z\s*]*\.[A-Z]+[A-Z\s*]*\.[A-Z]+[A-Z\s*](?=\.[0-9]+)') 
date = re.compile('[0-3][0-9]\/[A-Za-z]+\/[0-9]+(?=:)') 
for root, dirs, files in os.walk("./"): 
    for file in files: 
     if file.startswith("access_"): 
      f=open(file,'r') 

кажется, что название «файл» по-прежнему содержит значение этого старого файла. Я не вижу, чтобы какое-либо имя «файл» присваивало это значение вообще в скрипте. Поскольку я хочу, чтобы этот скрипт обрабатывал единственный журнал доступа в/opt/logs, access_log, по-видимому, мне нужно очистить это старое значение (или, тем не менее, это сделано); как мне это сделать?

+1

Пожалуйста, покажите, что находится в '...'. –

+0

Я не могу показать вас в данный момент (не на работе), но то, что это выглядит, это алфавит и форматирование цифр. Я буду рад напечатать его завтра. – Svardkvinna

+0

Вы ... еще не редактировали код в свой вопрос. Пожалуйста, отредактируйте свой вопрос, чтобы скрыть это. –

ответ

0

Проверьте переменную root. Возможно, вы ищете файл по адресу ./access_log-20150215, который фактически находится в подкаталоге, таком как ./subdir/access_log-20150215.

Если вы хотите, чтобы исследовать все подкаталоги использовать

f=open(os.path.join(root,file),'r') 

, но если вы хотите только верхний каталог вы можете использовать

os.listdir('.') 
+1

'root + file' не гарантирует, что разделитель пути вставлен. – isedev

+0

@isedev. Я забыл! Исправлена. – James

+0

На самом деле да, файл access_log-20150215 находится в/opt/log/archive, но мне нужен только текущий access_log, скопированный из/etc/httpd/logs в/opt/logs. Я думаю, что os.listdir ('.') Больше похож на то, что я ищу. Я попробую это завтра. – Svardkvinna

0

Нет гарантии, что файл, который вы ищете, находится в текущем каталоге.

Вы должны присоединиться к корневому пути к файлу при открытии файла:

import os.path 

../.. 
f = open(os.path.join(root,file),'r') 
../.. 

os.chdir('opt/logs') является также, вероятно, неправильно (это предполагает, что скрипт запускается из определенного каталога) - вы лучше использовать абсолютный путь (например, /opt/logs или что-то подходящее в вашем случае).

+0

Я тоже попробую это сделать, я не совсем уверен, что связано с корнем файла пути, но я хочу учиться. Также я хочу избавиться от линии os.dir.На данный момент мне нравится идея абсолютного каталога в обоих ваших предложениях; хотя, пока я не узнаю, как использовать Python намного лучше, мне просто нужно заставить это работать. – Svardkvinna

+0

О, я имел в виду, что я хотел бы избавиться от линии os.chdir, набрав ее неправильно прошлой ночью. – Svardkvinna

+0

, то используйте 'os.walk ("/opt/logs ")' непосредственно. – isedev

0

OK, поэтому, начиная с верхней части предложений от @James и @isedev, я сначала попробовал os.listdir ('.') и ... это сработало. Я запустил имяTime.py в папке/opt/logs только в process access_log (и не искать access_log-20150215 или любой другой) и получил мой выходной файл dateAccess.txt так, как мне это было нужно. Спасибо за ваши другие предложения; Я уверен, что в какой-то момент мне придется настроить этот файл на другие наши системы, чтобы предоставить больше статистических данных, поэтому следующая вещь в этом списке - изучить Python, чтобы ваши другие предложения имели смысл для меня. Огромное спасибо!

Смежные вопросы