2016-03-31 8 views
-5

私はPythonを全く知らないが、すぐにこのスクリプトを実行しなければならない。私はオンラインで同様の問題を探しましたが、正確なシナリオを見つけることはできません。存在しないファイルを探しているPythonスクリプト

私は、access_logからユーザ名と日付を出力するスクリプトnameTime.pyを実行しました。このリストには、ログ内の各ユーザの数と名前がリストに含まれています。スクリプトが終了せず、次のエラーが出力されました。

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' 

/etc/httpd/logsから/ opt/logsにコピーします。そのディレクトリ内の唯一の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変数を確認してください。実際には./subdir/access_log-20150215のようなサブディレクトリにある./access_log-20150215のファイルを探している可能性があります。

あなたが探検したい場合は、すべてのサブディレクトリはそう@Jamesからの提案の先頭から、あなただけのトップディレクトリをしたい場合は、あなたが

os.listdir('.') 
+1

'root + file'は、パス区切り文字が確実に挿入されません。 – isedev

+0

@isedev。忘れてた!一定。 – James

+0

実際には、access_log-20150215ファイルは/ opt/log/archiveにありますが、/ etc/httpd/logsから/ opt/logsにコピーされた現在のaccess_logのみが必要です。私は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を使用することができます

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

を使用と@isedev、私は最初にos.listdir( '。')を試してみました。私は/ opt/logsフォルダのnameTime.pyをにのみ実行しました。プロセスaccess_log(そしてではなくはaccess_log-20150215かそれ以外のものを探します)、私の出力ファイルdateAccess.txtを必要な方法で取得しました。あなたの他の提案もありがとう。より多くの統計情報を提供するために、ある時点でこのファイルを調整しなければならないと確信していますので、リストの次のものはPythonを勉強して他の提案が意味をなさせることです。どうもありがとう!

関連する問題